1

laravel eloquent orm で update メソッドと limit メソッドの両方を使用する方法がわかりませんでした。

$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

limit と take の両方の方法を試しました。

私は1つの結果だけを更新したいです。

しかし、更新時に制限を使用したり、メソッドを取得したりすることはできないと思います。

雄弁を介して1行だけを更新する方法はありますか?


追加 :

雄弁な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
    ));

これらの 2 つのコードは、制限パラメータをクエリに追加しませんでした

出力:

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
4

3 に答える 3

2

私はそれを試していませんが、Laravel 4 ロジックでは、この構文が機能すると思います。

$affectedRows = Promo::where('used','=',0)
    ->limit(1)
    ->update(array('user_id' => Auth::user()->id));
于 2013-06-04T13:50:27.617 に答える