GitHub - Ahnify/laravel-morphable: Easy querying on polymorphic relations.
source link: https://github.com/Ahnify/laravel-morphable
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README.md
Morphable
This package provides a trait that adds query scopes to an Eloquent model for easy querying on polymorphic relations.
Installation
You can install this package via composer using this command:
composer require "ahnify/laravel-morphable:^0.1"
The package doesn't need to be registered.
Usage
To query on polymorphic relation you must:
- add the trait
Ahnify\Morphable\MorphableTrait
to your model.
Example
use Ahnify\Morphable\MorphableTrait class ExampleModel extends Eloquent { use MorphableTrait; ... }
that's it.
now you can query on your relation like this:
ExampleModel::whereMorphable('transactionable',BankTransaction::class,function($query){ $query->where('amount','>', 30 ); })->get()
this is equivalent to this for non polymorphic relations:
ExampleModel::whereHas('bankTransaction',function($query){ $query->where('amount','>', 30 ); })->get()
also, we can chain it too:
ExampleModel::query() ->whereMorphable('transactionable',BankTransaction::class,function($query){ $query->where('amount','>', 30 ); }) ->orWhereMorphable('transactionable',OnlineTransaction::class,function($query){ $query->where('created_date','>', '2019-01-01' ); }) ->get()
also, if some of your polymorphic related to our model have common attributes, then we can query on them and pass an array of morphed class type like this:
ExampleModel::whereMorphable('transactionable',[BankTransaction::class,OnlineTransaction::class],function($query){ $query->where('amount','>', 30 ); })->get() // get all rows that have bank or online transactions that has amount more than 30
in this example the result includes all examples that has bank or online transaction with has amount more than 30
this works also with custom types too :
ExampleModel::whereMorphable('transactionable',['bankTransaction','onlineTransaction'],function($query){ $query->where('amount','>', 30 ); })->get()
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK