Я написал это, и мне просто интересно, если это лучший способ сделать это. Заказы имеют много сделок ... Сделки принадлежат заказу. Я запрашиваю заказ с идентификаторами, превышающими последний идентификатор, отправленный для выполнения. Затем я хочу только заказы, которые утвердили статус оплаты или являются автономными способами оплаты.Laravel complex scope запрос отношение (для обзора)
Этот код работает, просто интересно, если это лучший способ сделать это:
/**
* Get all orders pending fulfilment
*
* @param $query
* @param $last_fulfiled
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeToFulfil($query, $last_fulfiled)
{
return $query->where('id', '>', $last_fulfiled)
->where(function($query) {
$query->whereHas('transactions', function ($query) {
$query->where('status', '>=', 5);
})->orWhere('payment_method', '=', 2);
});
}
EDIT:
Вот SQL синтаксис:
select * from `orders` where `orders`.`deleted_at` is null and `id` > ? and ((select count(*) from `transactions` where `transactions`.`order_id` = `orders`.`id` and `status` >= ?) >= 1 or `payment_method` = ?)
Спасибо!
Спасибо за ваш ответ, я добавил синтаксис SQL к моему ответу ... Заставляет вас понять, насколько полезен Laravel :) – JohnWolf
Я думаю, что построенный запрос довольно совершенен. Пока вы убедитесь, что индексируете столбцы, которые вы фильтруете, это будет здорово. –
Да, я ... Спасибо за вашу любезную помощь. – JohnWolf