2017-03-11 21 views
0

私にuser_idrole_idがあるテーブルがあります。ドロップダウンからuser_id = 1を選択し、ドロップダウンからrole_id = 2を選択して保存します。次回は同じユーザーをテーブルに新しい行を作成するのではなく、別の役割を設定したい場合は次に新しいものを作成せずに更新しますか?誰かが何かを提案できますか?laravel eloquent:存在する場合、データを更新する方法

$roleUser = RoleUser::firstOrNew(
      ['role_id' => $request->Input(['role_id']), 
      'user_id' =>$request->Input(['user_id'])]); 
      $roleUser->save(); 

firstOrNewメソッドを使用しましたが、古いものを更新する代わりに新しいエントリを作成します。

+0

のために1つの以上のレコードを挿入します'?? –

+0

はい..ユーザーには1つの役割しかありません – Hola

+0

ユーザーが1つの役割しか持つことができない場合は、なぜピボット・テーブルを使用しますか? – Hammerbot

答えて

0

$roleUser = RoleUser::firstOrNew(array('role_id' => Input::get('role_id'))); $roleUser ->save();

あなたが複数のフィールドを追加することができます。..

例..

サンディエゴへオークランドからのフライトがある場合は、$ 99の価格を設定します。 一致するモデルが存在しない場合は、モデルを作成します。ここで

$flight = App\Flight::updateOrCreate( ['departure' => 'Oakland', 'destination' => 'San Diego'], ['price' => 99] ); `

1

動作するはずのコードです。しかし、私はあなたのデータベースアーキテクチャの選択肢をあまり理解していません。ユーザーが1つの役割しか持つことができない場合は、role_idusersテーブルに定義してから、belongsToの関係を使用してください。

$role_user = RoleUser::where('role_id',$request->get('role_id')) 
    ->where('user_id',$request->get('user_id')) 
    ->first(); 

if (is_null($role_user)) { 
    RoleUser::create([ 
     'user_id' => $request->get('user_id'), 
     'role_id' => $request->get('role_id') 
    ]) 
} 
1

ここで問題はどこですか?

あなたは一般的に次の操作を行いfirstOrCreateに似てfirstOrNew方法、使用している:データベース

  • から

    • を選択し、

    • 存在しない場合は、与えられたデータを挿入し

    • firstOrNewを使用する場合は、クエリーを実行するために->save()に編集してください。

    したがって、データが存在する場合は更新されません。

    しかし、私はupdateOrCreateメソッドを探していると思います。これは2つの配列引数をとります。最初は挿入されたデータで、存在する場合は関数が2つの配列引数をとり、行を更新します。

    既存モデルを更新する場合や、存在しない場合は新しいモデルを作成する場合もあります。 Laravelは updateOrCreateメソッドを提供し、これを1ステップで実行します。 firstOrCreate方法と同様に、updateOrCreateは、モデルを持続し、そう)(saveを呼び出すために何 必要はありません:Updateまたは新しいレコードを作成したときに、私は、このソースコードを使用してい

    $roleUser = RoleUser::updateOrCreate(
        // if not exists, insert the following RoleUser data 
        ['role_id' => $request->Input(['role_id']),'user_id' =>$request->Input(['user_id'])], 
        // otherwise, update RoleUser set role_id = ? 
        ['role_id' => $request->Input(['role_id'])] 
    ); 
    
  • +0

    状況を見てみましょう。次回は管理者として同じユーザーを選択した場合、管理者を更新してテーブルに新しい行を作成しないでください。私のロジックが嫌いですが使用したいあなたが管理者として選択し、次回同じユーザーがデータベースでユーザーとして選択する場合は、管理者とユーザーの役割を持つことになります。 – Hola

    +0

    あなたの 'RoleUser'関係ルールをチェックアウトするか、' user_id'を指定するためにwhere節をクエリに追加してください。 – hassan

    2

    。 Laravel 5でうまくいきました。2

    一つのレコードを存在する場合は、user_id ==あなたuser_id =>が他のrole_id

    を更新する必要がありますので、 `User`のみ1`役割を持つことができ、あなたのuser_id

    $roleUser = RoleUser::updateOrCreate([ 
        'user_id' => $request['user_id'], 
        ], 
        [ 
         'role_id' => $request['role_id'], 
        ]); 
    
    +0

    良いです。これも正しいと思います! –

    +0

    'カラムが見つかりません:1054 'where句'内の 'id'カラムが不明です(SQL:update' role_user'''id'がnullの場合 'role_user' = 2を設定してください。)あなたの解決策を使用した後にこのエラーが発生しました – Hola

    +0

    @あなたのテーブルには 'id'カラムがありません –

    関連する問題