删除查询生成器Laravel中的联接

删除查询生成器Laravel中的联接,laravel,query-builder,Laravel,Query Builder,我有这样一个删除查询: DELETE prefix_tableA, prefix_tableB, prefix_tableC FROM prefix_tableA INNER JOIN prefix_tableB ON prefix_tableA.user_id = prefix_tableB.user_id INNER JOIN prefix_tableC ON prefix_tableB.user_id = prefix_tableC.user_id WHERE prefix_tableA.

我有这样一个删除查询:

DELETE prefix_tableA, prefix_tableB, prefix_tableC
FROM prefix_tableA
INNER JOIN prefix_tableB ON prefix_tableA.user_id = prefix_tableB.user_id
INNER JOIN prefix_tableC ON prefix_tableB.user_id = prefix_tableC.user_id
WHERE prefix_tableA.id = 148
现在我想将其转换为查询生成器。我在这里搜索了很多帖子,但仍然没有找到预期的答案

我不想使用DB::raw,因为我的表名中有前缀。当我更改前缀时,我的查询将出错

是否要在查询生成器中编写此命令


谢谢大家!

尝试此查询您的控制器

DB::table('prefix_tableA')->join('prefix_tableB','prefix_tableA.user_id','=','prefix_tableB.user_id')->join('prefix_tableC','prefix_tableB.user_id','=','prefix_tableC.user_id')->where('prefix_tableA.id',148)->delete('prefix_tableA', 'prefix_tableB', 'prefix_tableC');

您可以使用
DB::delete()
DB::statement()

请尝试以下查询:

\DB::delete('DELETE prefix_tableA, prefix_tableB, prefix_tableC FROM prefix_tableA, prefix_tableB, prefix_tableC INNER JOIN prefix_tableB ON prefix_tableA.user_id = prefix_tableB.user_id INNER JOIN prefix_tableC ON prefix_tableB.user_id = prefix_tableC.user_id  WHERE prefix_tableA.id = 148');

谢谢你们的回复,伙计们

如前所述,我在config/database.php中配置了我的表前缀,因此如果我更改该文件中的前缀名称,那么使用原始查询将是错误的


所以我唯一的方法就是在每个表中编写一个delete查询,并在我的控制器中调用它。我实现了大约3个模型,代码很长,但这是Laravel中的唯一方法

你应该这样尝试。这种方法对我有效

$raw_query = 'DELETE prefix_tableA, prefix_tableB, prefix_tableC
FROM prefix_tableA
INNER JOIN prefix_tableB ON prefix_tableA.user_id = prefix_tableB.user_id
INNER JOIN prefix_tableC ON prefix_tableB.user_id = prefix_tableC.user_id
WHERE prefix_tableA.id = ?';  

$status = \DB::delete($raw_query, array('148'));

文档:

这是个好问题,但看起来Laravel本机不支持此功能。使用原始SQL查询可能是执行多表删除的唯一方法。请注意,有些人可能会争辩说,甚至需要执行多表删除都有代码味道。相反,考虑添加适当的级联删除约束,以便只需要从单个表中删除(Laravel本身支持)。如果我在config/database.php中更改我的表前缀,这个查询将出错。