删除加入查询构建器Laravel

时间:2019-10-17 03:34:50

标签: 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.id = 148

现在,我要将其转换为查询生成器。我在这里搜索了很多帖子,但仍然找不到预期的答案。

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

是否要在查询生成器中编写此代码?

谢谢!

4 个答案:

答案 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'));

文档:http://laravel.com/docs/database#running-queries