如何在一个查询中删除多个表中的行(使用左连接)。 查询:
DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....
所以,我试试这样:
DB::table('deadline', 'job')
->leftJoin('job', 'deadline.id', '=', 'job.deadline_id')
->where('deadline.id', $id)
->delete();
似乎Laravel不支持使用左连接从多个表中删除。
是否有受支持的方式或解决方法?
答案 0 :(得分:5)
似乎我的方式是不可能的。所以,我这样做了。
$q = 'DELETE deadline, job FROM deadline LEFT JOIN job ...where deadline.id = ?';
$status = \DB::delete($q, array($id));
答案 1 :(得分:1)
要使laravel允许连接删除很简单 - 您只需将Illuminate\Database\Query\Grammars\Grammar
中的compileDelete函数更改为:
public function compileDelete(Builder $query)
{
$table = $this->wrapTable($query->from);
$components = implode(' ', array(
is_array($query->joins) ? $this->compileJoins($query, $query->joins) : '',
is_array($query->wheres) ? $this->compileWheres($query, $query->wheres) : '',
is_array($query->limit) ? $this->compilelimit($query, $query->limit) : '',
is_array($query->offset) ? $this->compileOffset($query, $query->offset) : ''
));
return trim("delete $table from $table ".$components);
}
然后 - > delete()将以您期望的方式工作。我已经将这个作为拉取请求添加到laravel框架repo中,所以希望这可能会合并到下一个版本中 - 只需看看。
答案 2 :(得分:0)
DB::table(DB::raw('deadline, job'))
可能有用。如果没有,则必须手动编写SQL并通过DB::statement()
调用它。
答案 3 :(得分:0)
$query = 'DELETE courses,course_contents FROM courses
INNER JOIN course_contents ON course_contents.course_id = courses.id
WHERE courses.id = ?';
\DB::delete($query, array($id));