ahnify / laravel-morphable
此包已被弃用且不再维护。未建议替代包。
在多态关系上进行简单查询
0.1.2
2019-06-08 09:42 UTC
Requires
- php: >=7.0
- illuminate/database: ~5.5.0|~5.6.0|~5.7.0|~5.8.0
Requires (Dev)
- orchestra/testbench: ~3.4.2|~3.5.0|~3.6.0|~3.7.0|~3.8.0
- phpunit/phpunit: ^5.7|6.2|^7.0|^8.0
This package is auto-updated.
Last update: 2021-09-08 15:05:54 UTC
README
Morphable
此包提供了一个特质,为 Eloquent 模型添加查询作用域,以便于在多态关系上轻松进行查询。
安装
您可以通过以下命令使用 composer 安装此包:
composer require "ahnify/laravel-morphable:^0.1"
此包无需注册。
用法
要在多态关系上进行查询,您必须
- 将特质
Ahnify\Morphable\MorphableTrait
添加到您的模型中。
示例
use Ahnify\Morphable\MorphableTrait class ExampleModel extends Eloquent { use MorphableTrait; ... }
就是这样。
现在您可以这样查询您的关联关系
ExampleModel::whereMorphable('transactionable',BankTransaction::class,function($query){ $query->where('amount','>', 30 ); })->get()
这等价于非多态关系中的这个
ExampleModel::whereHas('bankTransaction',function($query){ $query->where('amount','>', 30 ); })->get()
此外,我们还可以将其连接起来
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()
此外,如果您的某些多态关联模型具有公共属性,则我们可以查询它们,并传递一个包含形态化类类型的数组,如下所示
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
在这个例子中,结果包括所有具有银行或在线交易且交易金额超过30的示例
这也适用于自定义类型
ExampleModel::whereMorphable('transactionable',['bankTransaction','onlineTransaction'],function($query){ $query->where('amount','>', 30 ); })->get()