如何使用db :: raw对laravel fluent进行更新查询

时间:2013-11-21 05:15:23

标签: laravel

这与我先前的一个问题有关:

Update table1 field with table2 field value in join laravel fluent

但由于现在这是一种不同的方法,我只想问另一个问题:

如何使用DB:raw正确进行更新?

我想使用contents.type的值更新favorite_contents.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

3 个答案:

答案 0 :(得分:48)

代码原始更新如下:

...->update( array(
    'column' => DB::raw( 'column * 2' )
) );

答案 1 :(得分:37)

DB::statement("UPDATE favorite_contents, contents SET favorite_contents.type = contents.type where favorite_contents.content_id = contents.id");

对于不涉及输出内容(select)的原始查询,请尝试DB::statement

答案 2 :(得分:18)

在Laravel 5.2中将会有类似的,简单的实现, 查询生成器:

DB::table('stores')
            ->where('id', $request)
            ->update(['visibility' =>DB::raw($value)]);

此响应经过现场测试并正常运行