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();
DB::select(`orders.status`,`orders_products.*`)
->from(`orders`)
Order::
Order::query()
если вам так удобней->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`);
})
with('products')
->where(`orders.status`, `NOT IN`, `('STORNO')`)
->where(`orders.offers_number`, `IS`, NULL)
->whereNotIn('status', ['STORNO'])
->whereNull('offers_number')
->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`)
С этими двумя лень даже смотреть, но уверен, что и это заменяется без проблем. А даже если по какой-то причине нет, то всегда можно оставить raw:
Понижайте ЧСВ и прекращайте оскорблять людей.Вас я не оскорблял, я мог вас обижать. Это разные вещи опять же, путаетесь в терминологии.