这与我先前的一个问题有关:
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
答案 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)]);
此响应经过现场测试并正常运行