所以这个查询,经过用户| sticky bit |的一些帮助后工作得非常好,但现在我无法解决如何将其翻译成Laravel Eloquent结构的问题。
UPDATE knowns
SET engagementtitle = (SELECT instructions.engagementtitle
FROM instructions
WHERE instructions.reference = knowns.reference)
WHERE EXISTS (SELECT *
FROM instructions
WHERE instructions.reference = knowns.reference);
我挣扎的部分是Eloquent陈述汇编的非明显顺序。
我尝试过使内部部件工作的方法,然后尝试将它们进一步包裹起来。因此可以通过以下方式创建WHERE EXISTS子句:
DB::table('knowns')
->whereExists(function ($query) {
$query->select(DB::raw('1'))
->from('instructions')
->whereRaw('instructions.reference = knowns.reference');
})
->get();
哪个产生
select * from "knowns"
where exists (select 1 from "instructions" where instructions.reference = knowns.reference)"
但是我没有进一步包装那部分。首先,我无法在文档中找到关键字" SET"的等价物。
这是我完全尝试生成上面的SQL语句。
DB::table('knowns')
->update(['instructions.reference' => 'knowns.reference'])
->select('instructions.engagementtitle')
->from('instructions')
->where('instructions.reference=knowns.reference')
->whereExists(function ($query) {
$query->select(DB::raw('1'))
->from('instructions')
->whereRaw('instructions.reference = knowns.reference');
})
->get();
(为狗的早餐道歉 - 它甚至看起来坏)
修改 或者我可以使用像这样的PDO方法......
$PDO=DB::connection()->getPdo();
$stmt=$PDO->prepare("
...SQL STATEMENT...
");
$stmt->execute();
$result = $stmt->fetchAll();
但是我仍然想知道是否有雄辩的方法。
答案 0 :(得分:0)
你可以使用像
这样的连接重写普通的sql查询UPDATE
knowns k
JOIN instructions i ON i.reference = k.reference
SET k.engagementtitle = i.engagementtitle
在查询构建器中,我猜这应该可行
DB::table('knowns as k')
->join('instructions as i', 'i.reference', '=', 'k.reference')
->update(['k.engagementtitle' => DB::raw("i.engagementtitle")]);