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 

0 ответов

Другие вопросы по тегам