Итак, этот запрос после некоторой помощи от пользователя | 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();
Но я все равно хотел бы знать, есть ли подход Eloquent.