我有一个这样的删除查询:
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,因为我在表名中有前缀。当我更改前缀时,查询将出错。
是否要在查询生成器中编写此代码?
谢谢!
答案 0 :(得分:0)
尝试此查询您的控制器
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');
答案 1 :(得分:0)
您可以使用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');
答案 2 :(得分:0)
感谢您的回复!
就像我说的那样,我在config / database.php中配置表前缀,因此如果更改该文件中的前缀名称,则使用原始查询将是错误的。
因此,我要做的唯一方法是在每个表中编写一个删除查询,然后在控制器中调用它。我实现了大约3个模型,长代码,但这是Laravel中的唯一方法!
答案 3 :(得分:0)
您应该这样尝试。这种方式对我有效。
$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'));