雄辩的更新和限制

时间:2013-06-04 13:19:08

标签: laravel laravel-4 eloquent

我无法弄清楚如何在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

3 个答案:

答案 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代码:

https://github.com/laravel/framework/blob/5.4/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php#L129

所以,首先 - > limit(1)然后 - > update([fields]);

DB::table('table')
    ->where('field', 'value')
    ->limit(1)
    ->update(['field', 'new value']);