Подтвердить что ты не робот

Как выполнить запрос обновления на 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

4b9b3361

Ответ 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)]);

Этот ответ протестирован на реальном сайте и работает нормально