我正在尝试找出使用Query Builder
或Eloquent
对此进行编码的最佳方式。
以最简单的形式,如果某个项目已在transactions
表中,则应阻止插入新的购买请求。除了运行完整的原始查询之外,我没有找到任何有用的参考。
INSERT INTO `transactions`
(`user_id`, `item_id`, `type`, `created_at`, `updated_at`)
SELECT
1, 186808, 'bought', NOW(), NOW()
WHERE
(
SELECT
SUM(
CASE
WHEN `type` = 'bought' THEN 1
WHEN `type` = 'sold' THEN -1
END
)
FROM `transactions`
WHERE
(`item_id`, `user_id`) = (186808, 1)
GROUP BY `item_id`
) = 0
答案 0 :(得分:0)
在Laravel中,您可以使用DB::raw(<your_complex_query_here>)
来实现。
DB::raw("INSERT INTO `transactions`
(`user_id`, `item_id`, `type`, `created_at`, `updated_at`)
SELECT
1, 186808, 'bought', NOW(), NOW()
WHERE
(
SELECT
SUM(
CASE
WHEN `type` = 'bought' THEN 1
WHEN `type` = 'sold' THEN -1
END
)
FROM `transactions`
WHERE
(`item_id`, `user_id`) = (186808, 1)
GROUP BY `item_id`
) = 0");
有关更多信息,请参见https://laravel.com/docs/5.7/queries#raw-expressions
处的Laravel文档。