在 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 案例)