我正在尝试找出使用查询生成器
或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
最佳答案
在 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");
有关更多信息,请参阅此处的 Laravel 文档 https://laravel.com/docs/5.7/queries#raw-expressions
关于mysql - Laravel 中包含 insert into 和 where 子查询的复杂插入查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49700491/