我无法弄清楚如何在laravel eloquent orm中同时使用更新和限制方法。
$affectedRows = Promo::where('used','=',0)
->update(array('user_id' => Auth::user()->id))
->limit(1); // Call to a member function limit() on a non-object
//->take(1); // Call to a member function take() on a non-object
我尝试了限制和采取方法。
我想做的只有一个结果会更新。
但我想,我不能在更新时使用限制或采取方法。
有没有办法通过eloquent只更新一行?
添加:
雄辩的ORM
$affectedRows = Promo::where('user_id','=',DB::raw('null'))->take(1)
->update(
array(
'user_id' => Auth::user()->id,
'created_ip' =>Request::getClientIp(),
'created_at' => new DateTime,
'updated_at' => new DateTime
)
);
查询构建器
$affectedRows = DB::table('promos')->whereNull('user_id')
->take(1)
->update(array(
'user_id' => Auth::user()->id,
'created_ip' =>Request::getClientIp(),
'created_at' => new DateTime,
'updated_at' => new DateTime
));
这两个代码没有为查询添加限制参数
输出:
update `promos` set `user_id` = '1', `created_ip` = '127.0.0.1', `created_at` = '2013-06-04 14:09:53', `updated_at` = '2013-06-04 14:09:53' where `user_id` = null
答案 0 :(得分:4)
我使用了原始查询。在eloquent和query构建器上没有方法限制/采用更新和删除查询。使用
DB::update(DB::raw("UPDATE query"));
像这样。
答案 1 :(得分:2)
我还没有尝试过,但是Laravel 4逻辑让我觉得这种语法会起作用:
$affectedRows = Promo::where('used','=',0)
->limit(1)
->update(array('user_id' => Auth::user()->id));
答案 2 :(得分:1)
谈论laravel 5(不确定L4),取决于db引擎。 MySQL支持更新限制,因此它可以工作,这是执行此操作的laravel代码:
所以,首先 - > limit(1)然后 - > update([fields]);
DB::table('table')
->where('field', 'value')
->limit(1)
->update(['field', 'new value']);