Добавить объединения по умолчанию в модель Laravel - PullRequest
0 голосов
/ 07 октября 2019

Я создал метод в моей модели 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 Ответ

3 голосов
/ 07 октября 2019

Измените

$stock = Stock::scopeJoinStocksQuery();

на

$stock = Stock::joinStocksQuery();

При работе с областями вы пропускаете префикс scope в имени метода, см. Подробнее о локальных областях .

...