Repositories
There is a repository base class that contains CRUD and other useful method which you can use to avoid redundancy.
Available methods
getQueryBuilder
After creating your repository class by your self our using
valravn repository
command, you must implement this
method to establish related query builder object for repository class.
disableAuthorization
Every actions on builder instance should authorize. sometimes you don't want to
authorize your query, so by calling disableAuthorization
method on your
repository instance, the repository doesn't authorize the action.
enableAuthorization
Sometimes you want to run an action without authorization but after that in the
same scope, you want to run an action with authorization. in this scenario, you
need to call disableAuthorization
method first and after that
call enableAuthorization
method to enable authorization again.
query
When you call an action like all
, you might don't want all columns of rows. so
you can use select
method before all
and pass your specific columns to
fetch. there can be more methods like select
. the important point here is,
methods like select
only apply when you use query
method to get builder
instance.
query
method instead of getQueryBuilder
.
authorize
Using this method you will be able to authorize actions. there is some examples.
1public function create( array $data ): Model {
2 $this->authorize();
3
4 return $this->query()->create( $data );
5}
Above example shows how to authorize an action without any parameter. it will
authorize create
ability on related policy class. to determine your custom
ability to authorize, you just have to pass the name of your ability
to authorize
method.
1public function create( array $data ): Model {
2 $this->authorize('makeAndStore');
3
4 return $this->query()->create( $data );
5}
Then, you need to create makeAndStore
method in your related policy class.
Also, you can only pass the model object and let the authorize
method guess
the ability.
1public function viewComments( Post $model ): Builder {
2 $this->authorize( $model );
3
4 return $model->comments()
5}
In above example, the authorize
method will authorize the viewComments
method of related policy class. the viewComments
method on policy class will
receive $model
parameter.
And there is the way you can pass your custom ability with parameter(s).
1public function viewComments( Post $model ): Builder {
2 $this->authorize( 'viewAllComments', $model );
3
4 return $model->comments()
5}
authorizeThisAction
It's just a shorthand for authorize
method.
1$this->authorizeThisAction( $param );
2// instead of
3$this->authorize( null, $param );
all
Return query builder instance and ables us to access the all rows.
find
Find a specific resource using id
by default. but if you want to find a row by
another column, you just need to do something like this:
1app( SampleRepository::class )->find('specific-slug-for-example','slug');
First parameter is the value and the second value is the column name that Valravn should search in.
create
Create a resource using given data and return the created model as result.
update
Update specific Model using given data and return a boolean as result.
batchUpdate
Update many resources in one query at once and also return a bool value as result.
delete
Delete a specific resource and return true
. otherwise throw an
exception. delete
method contains two deleting
and deleted
hook.