在 Laravel 4 查询生成器中使用 Join 删除

Posted

技术标签:

【中文标题】在 Laravel 4 查询生成器中使用 Join 删除【英文标题】:Delete with Join in Laravel 4 Query Builder 【发布时间】:2014-10-28 16:28:25 【问题描述】:

有没有办法通过查询构建器在 Laravel 4 上使用 Inner Join 进行删除?

我有这个示例查询(sample query taken from this source.):

DELETE s.* FROM spawnlist s
INNER JOIN npc n ON s.npc_templateid = n.idTemplate
WHERE (n.type = "monster");

我尝试过类似的方法:

DB::table('spawnlist as s')
        ->join('npc as n', 's.npc_templateid', '=', 'n.idTemplate')
        ->where('n.type', 'monster')
        ->delete();

但是这里好像不能加入?

【问题讨论】:

【参考方案1】:

我认为最好的方式是我们 laravel 的事件,它更容易和干净。 您可以像这样执行相同的任务:

DB::table('spawnlist')->delete();

然后创建一个 spawnlist 事件捕获删除事件并像这样删除另一个表:

Spawnlist::deleting( function ($sl) 

    DB::table('npc')->delete();
);

【讨论】:

where子句怎么样? 您仍然可以像这样在删除方法之前添加它... DB::table('spawnlist')->where('table.field', 'table.field')->delete (); 这不会导致 DB 门面向数据库查询和提交两次吗?

以上是关于在 Laravel 4 查询生成器中使用 Join 删除的主要内容,如果未能解决你的问题,请参考以下文章

带有 Join 和 If 条件的 Laravel 查询生成器

laravel 简单查询生成器(join 和 where 案例)

Laravel json join,尝试加入具有多个 id 的 JSON 列和具有位置 id 的位置表,查询生成器

Laravel 查询生成器选择数组内的返回列

Laravel 使用查询生成器进行嵌套连接查询

查询生成器获取结果数组而不是 Laravel 中的对象