laravelのsaveを使って、
language_id: [1,2,3]のように複数値あるデータを、
中間テーブルにそれぞれ1レコードずつ保存したいのですができません。
language_id: 1のように1つの値にすると保存できます。
どのようにすれば1レコードずつ保存、更新ができるのでしょうか?
[Controller, Modal, テーブル構成]
・ユーザー
- UserController.php
- User.php(model)
- users(table)
・ユーザー言語(中間テーブル)
- UserLanguage.php(model)
- user_languages(table)
※user_idとlanguage_idがforeignキー
・言語
- Language.php(model)
- languages(table)
下記がdbの保存、更新ソースになります。
// UserController.php <?php $user = Auth::user(); $language = UserLanguage::nullDeleteAt()->userId($user->id)->first(); if(!$language){ $language = new UserLanguage(); } $user_status = $request->get('user', []); // "user": { "name": "hogehoge", "language_id": 1 } DB::transaction(function () use ($language, $request, $user_status) { $language->fill($user_status)->save(); $language->languages()->sync($request->get('user', [])); return $language; }); return $language;
// UserLanguage.php protected $fillable = [ 'language_id' ]; public function languages() { return $this->belongsTo('App\Language', 'language_id'); } public function scopeNullDeleteAt($query) { return $query->where('deleted_at', NULL); } public function scopeUserId($query, $user_id) { return $query->where('user_id', $user_id); }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/07/24 08:59
退会済みユーザー
2019/07/24 09:06