SELECT
orders.`status`,
orders_products.*
FROM
orders
LEFT JOIN orders_products ON orders_products.`orders_id`=orders.id
LEFT JOIN products ON products.id=orders_products.products_id
WHERE
(SELECT
COUNT(*)
FROM
warehouse_products AS wp1
WHERE wp1.order_product_id = orders_products.id) < orders_products.`amount`
AND orders.`status` NOT IN ('STORNO')
AND orders.`offers_number` IS NULL
AND EXISTS (
SELECT 1 FROM warehouse_products wp2
LEFT JOIN products p2 ON p2.id=wp2.product_id
WHERE wp2.reserved_dt IS NULL AND wp2.stock_out_dt IS NULL AND p2.`ident_id`=products.`ident_id`
)
в
DB::select(`orders.status`,`orders_products.*`)
->from(`orders`)
->join(`orders_products`, function($join) {
$join->on(`orders_products.orders_id`, `=`, `orders.id`);
})
->join(`products`, function($join) {
$join->on(`products.id`, `=`, `orders_products.products_id`);
})
->whereRaw(`( SELECT COUNT(*) FROM warehouse_products AS wp1 WHERE wp1.order_product_id = orders_products.id ) <`, [], `orders_products.amount`)
->where(`orders.status`, `NOT IN`, `('STORNO')`)
->where(`orders.offers_number`, `IS`, NULL)
->whereRaw(`EXISTS ( SELECT 1 FROM warehouse_products wp2 LEFT JOIN products p2 ON p2.id = wp2.product_id WHERE wp2.reserved_dt IS NULL AND wp2.stock_out_dt IS NULL AND p2.`ident_id` = products.`ident_id` )`, [], `AND`)
->get();
все что надо было мне для экономии времени он завернул так же как и я в RAW )))))))
С этими двумя лень даже смотреть, но уверен, что и это заменяется без проблем. А даже если по какой-то причине нет, то всегда можно оставить raw:
->whereRaw(`( SELECT COUNT(*) FROM warehouse_products AS wp1 WHERE wp1.order_product_id = orders_products.id ) <`, [], `orders_products.amount`)
->whereRaw(`EXISTS ( SELECT 1 FROM warehouse_products wp2 LEFT JOIN products p2 ON p2.id = wp2.product_id WHERE wp2.reserved_dt IS NULL AND wp2.stock_out_dt IS NULL AND p2.`ident_id` = products.`ident_id` )`, [], `AND`)
Alex Wells,
1. Нет неправильных названий таблиц и использование eloquent не дает НИЧЕГО хорошего в рамках поставленного вопроса. eloquent нужен после запроса. А я не дал никаких подробностей что я делаю дальше.
2. with не генерируют join
3. тем что вы убрали префикс таблицы, вы допустили возможность кучи ошибок при доработке запроса через пол года.
4. Скорее всего вы изучили фрэймворк не изучив основы, оттуда и такие пробелы в знаниях.
5.
С этими двумя лень даже смотреть, но уверен, что и это заменяется без проблем. А даже если по какой-то причине нет, то всегда можно оставить raw:
вот как-раз там вся соль. Если бы вам было не лень смотреть, может вы бы эту всю дичь не написали.
6.
Понижайте ЧСВ и прекращайте оскорблять людей.
Вас я не оскорблял, я мог вас обижать. Это разные вещи опять же, путаетесь в терминологии.
Александр Аксентьев, Угу, а этот парсер даже не распарсил EXISTS :( Думал буду время экономить на вложенных запросах, а нет.. придется все ручками фигачить
1. Это как говорить, что не существует единого стиля кода - бред. Есть общие нормы наименования таблиц, как и всего остального.
2. with вытягивает зависимости - то что вам нужно.
3. где я убирал префикс таблицы?) Мне кажется вы не знаете, что такое связи.
4. Кажется вы взялись за написание на фреймворке, не изучив его.
5. Их МОЖНО написать через raw, в чем проблема?
6. Оскорбление - понятие относительное и часто используется в смысле "обижать". Думаю вы это знаете, просто решили докопаться к словам =)