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

Bry*_*n P 29 laravel

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

使用join laravel fluent中的table2字段值更新table1字段

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

你如何正确地使用更新DB:raw

我想favorite_contents.type用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");
Run Code Online (Sandbox Code Playgroud)

这是第一个在我使用上述代码之前没有更新的代码:

$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"
        ));
Run Code Online (Sandbox Code Playgroud)

PS:这在sql编辑器上完成时有效:

UPDATE favorite_contents, contents SET favorite_contents.type = contents.type where favorite_contents.content_id = contents.id

AMI*_*MIB 59

代码原始更新如下:

...->update( array(
    'column' => DB::raw( 'column * 2' )
) );
Run Code Online (Sandbox Code Playgroud)

  • 但是...如何在update语句中为DB:raw设置参数?! (3认同)
  • 这应该是正确的答案,因为它尽可能忠实于 ORM,并减少所需的原始 SQL 数量。 (2认同)

Iro*_*ind 41

DB::statement("UPDATE favorite_contents, contents SET favorite_contents.type = contents.type where favorite_contents.content_id = contents.id");
Run Code Online (Sandbox Code Playgroud)

尝试DB::statement不涉及输出内容的原始查询(选择).

  • 的确,这就是他的 DB::raw() 语句没有执行任何内容的原因。但是显示如何在 update() 中使用 DB::raw() 的另一个答案可能是大多数查看此问题的人可能正在寻找的。 (2认同)

Iva*_*rus 20

并且将在Laravel 5.2,Query Builder中进行类似,简单的实现:

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

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