Сочетание внутреннего соединения и где заявления в Eloquent - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь преобразовать следующий запрос к базе данных для использования Eloquent:

$orderitems = DB::table('order_items')
    ->join('orders', 'orders.id', '=', 'order_items.order_id')
    ->where('orders.status', 1)
    ->where('order_items.sku', $sku)
    ->select('order_items.*')
    ->get();

Я пробовал следующее:

$orderitems = Item::where('sku', $sku)
    ->with(['order' => function ($query) {
        $query->where('status', 0);
    }])
    ->get();

, но, похоже, он возвращает больше результатовчем следует.Используя DB::getQueryLog, я вижу, что запрос order_items не соединяется с таблицей заказов:

select * from `order_items` where `stock_code` = ? and `order_items`.`deleted_at` is null

Нужно ли создавать новое отношение между элементами заказа и заказом и добавлять дополнительные данные в этом месте??

Отношения:

  • В заказе есть много предметов
  • У элемента есть один заказ

1 Ответ

0 голосов
/ 21 февраля 2019

Решением было использование Query Scopes https://laravel.com/docs/5.7/eloquent#query-scopes

В контроллере:

$orderitems = Item::stock($sku)->paginate(10);

В модели элементов заказа:

public function scopeStock($query, $sku)
{
    return $query->join('orders', function ($join) {
        $join->on('orders.id', '=', 'order_items.order_id');
        $join->where('orders.status', '=', 1);
    })
    ->select('order_items.*', 'orders.order_date')
    ->where('order_items.sku', $sku);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...