SQL-запрос к Eloquent конвертировать
Можете ли вы помочь мне преобразовать этот SQL-запрос в Eloquent? Я сижу и пытаюсь это часами, но безуспешно.
Обычно мне нужны все предложения (со всеми столбцами) из таблицы "предложения", и для каждого предложения мне нужно "количество предложений", которые размещены в этом предложении (столбец "ставки" таблицы "offer_id").
предложения. bid_accepted_id - указывает, какую ставку выиграть предложение с этим идентификатором. Например. 2 означает, что победителем предложения является ставка с id =2.
Кроме того, если 'bid_accepted_at' в таблице 'offer' не равно нулю, мне нужны 'first_name' и 'last_name' с номером 'phone' победившего пользователя (есть только один победитель). Победивший пользователь - это когда "bid_accepted_at" не пустой (не NULL) в "предложениях".
Из результата исключите эти предложения, которые были архивированы или удалены (не NULL).
И покажите эти предложения (с "количеством заявок" и победителем, если есть победитель) в порядке предложений "состояние" -> "новое", "принято", "выполнено", "отменено"
Вот SQL:
$offers = DB::select("SELECT `offers`.*, `users`.`first_name`, `users`.`last_name`, `users`.`phone`,
(SELECT COUNT(b.offer_id)
FROM bids AS b
LEFT JOIN offers AS o ON b.offer_id = o.id
WHERE o.id=offers.id) as nr_of_bids
FROM `offers`
LEFT JOIN `bids` ON `offers`.`accepted_bid_id` = `bids`.`id`
LEFT JOIN `users` ON `bids`.`user_id` = `users`.`id`
WHERE `offers`.`deleted_at` IS NULL
AND `offers`.`archived_at` IS NULL
ORDER BY FIELD(offers.status , 'new', 'accepted', 'done' , 'cancelled') ASC");
Вот как выглядит таблица, извините за ссылку, я не могу показать рис здесь
Вы можете помочь с этим?
РЕДАКТИРОВАТЬ
Оказывается, мне нужен только запрос на изменение, чтобы использовать paginate(). Итак, я пришел к этому:
$columns = "offers.*,
users.first_name,
users.last_name,
users.phone
";
$offers= DB::table('offers')
->select(DB::raw($columns))
->leftJoin('bids', 'offers.accepted_bid_id', '=', 'bids.id')
->leftJoin('users', 'bids.user_id', '=', 'users.id')
->whereNull('offers.deleted_at')
->whereNull('offers.archived_at')
->orderBy(DB::raw("FIELD(offers.status, 'new', 'accepted', 'done',
'cancelled')"))->paginate(20);
Но все же он неполный, понятия не имею, как преобразовать, точнее, куда поместить подзапрос в операторе SELECT: (с другим select() под первым select()? Как-то в $colums?),
(SELECT COUNT(b.offer_id)
FROM bids AS b
LEFT JOIN offers AS o ON b.offer_id = o.id
WHERE o.id=offers.id) as nr_of_bids