ahnify/laravel-morphable

此包已被弃用且不再维护。未建议替代包。

在多态关系上进行简单查询

0.1.2 2019-06-08 09:42 UTC

This package is auto-updated.

Last update: 2021-09-08 15:05:54 UTC


README

Total Downloads Latest Stable Version License

Morphable

此包提供了一个特质,为 Eloquent 模型添加查询作用域,以便于在多态关系上轻松进行查询。

安装

您可以通过以下命令使用 composer 安装此包:

composer require "ahnify/laravel-morphable:^0.1"

此包无需注册。

用法

要在多态关系上进行查询,您必须

  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()