Как выполнить запрос обновления на laravel, свободно используя db:: raw
Это связано с одним из моих вопросов ранее:
Обновить поле table1 со значением поля table2 в свободном доступе laravel
Но поскольку сейчас это другой подход, я задам еще один вопрос:
Как правильно выполнить обновление с помощью DB:raw
?
Я хочу обновить favorite_contents.type
со значением content.type, но он ничего не делает, работает статическая настройка от 1 до favorite_contents.expired
.
Это мой код, который до сих пор не обновляет тип, даже когда использовался DB::raw
:
$table = 'favorite_contents';
$contents = DB::table($table)
->join('contents', function($join) use($table){
$join->on("$table.content_id", '=', 'contents.id');
})
->whereIn("$table.content_id",$ids)
->update(array(
"$table.expired" => 1
));
DB::raw("UPDATE favorite_contents, contents SET favorite_contents.type = contents.type where favorite_contents.content_id = contents.id");
Это первый код, который не обновляется до того, как я прибегнул к вышеуказанному коду, который не работает:
$table = 'favorite_contents';
$contents = DB::table($table)
->join('contents', function($join) use($table){
$join->on("$table.content_id", '=', 'contents.id');
})
->whereIn("$table.content_id",$ids)
->update(array(
"$table.expired" => 1,
"$table.type" => "contents.type"
));
P.S:
Это работает, когда выполняется в редакторе sql:
UPDATE favorite_contents, contents SET favorite_contents.type = contents.type where favorite_contents.content_id = contents.id
Ответы
Ответ 1
DB::statement("UPDATE favorite_contents, contents SET favorite_contents.type = contents.type where favorite_contents.content_id = contents.id");
Попробуйте DB::statement
для необработанных запросов, которые не включают вывод чего-либо (выберите).
Ответ 2
обновить исходные версии кода следующим образом:
...->update( array(
'column' => DB::raw( 'column * 2' )
) );
Ответ 3
И будет работать такая схожая, простая реализация в Laravel 5.2,
Query Builder:
DB::table('stores')
->where('id', $request)
->update(['visibility' =>DB::raw($value)]);
Этот ответ протестирован на реальном сайте и работает нормально