默认情况下将联接添加到Laravel模型

时间:2019-10-07 05:49:56

标签: php laravel eloquent laravel-6

我在Laravel模型中创建了一个方法,该方法向查询生成器添加了一些leftJoins,但我想知道是否有更好的方法来调用它。

我的模特:

class Stock extends Model
{

    protected $primaryKey = 'stock_id';

    static public function scopeJoinStocksQuery($query){
        return $query->leftJoin('parts','parts.part_id','=','stocks.part_id')->leftJoin('colors','colors.color_id','=','stocks.color_id');
    }
}

我现在调用模型的方式:

$stock = new Stock;
$stock = Stock::scopeJoinStocksQuery($stock);

if($input){
    $stock->where('model','LIKE','%'.$input.'%');
}

$stocks = $stock->offset(10)
            ->limit(50)
            ->orderBy('model', 'asc')
            ->get();

我想要写的方式:

$stock = Stock::scopeJoinStocksQuery();

if($input){
    $stock->where('model','LIKE','%'.$input.'%');
}

$stocks = $stock->offset(10)
            ->limit(50)
            ->orderBy('model', 'asc')
            ->get();

是否可以整理代码并以最后一种方式编写代码?

1 个答案:

答案 0 :(得分:3)

更改此

$stock = Stock::scopeJoinStocksQuery();

$stock = Stock::joinStocksQuery();

使用范围时,您在方法名称中省略了scope前缀,请参阅有关local scopes的更多信息。