我有3个表Users,Languages和Language_User,如下所示:
ID
名称
...
ID
语言
ID
USER_ID
LANGUAGE_ID
型( '学习', '天然')
我想更新两种类型的language_id,但取决于类型。
所以,如果$user = User::find($id); and type is native
输入language_id as 3
(让我们说)
类似地,if type is learn
输入language_id as 4
(假设)来自PATCH类型的形式。
我不明白如何使用它并添加额外检查类型:$lang = User::find($id)->languages()->updateExistingPivot($languageId, $attributes);
OR
App\User::find(1)->languages()->save($language, ['language_id' => $learn]);
如何在覆盖数据之前检查数据透视表中的类型。
我试过了:
public function settings_update(Request $request, $id)
{
$rules = array(
'learn' => 'required',
'native' => 'required',
'search_status' => 'required'
);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails()) {
return Redirect()->back()->withErrors($validator);
} else {
$user = User::find($id);
$user ->search_status = Input::get('search_status');
$user ->save();
$learn_id = Input::get('learn');
$teach_id = Input::get('teach');
$lang1 = User::find($id)->languages()->wherePivot('type', 'learn')->attach($learn_id);
$lang2 = User::find($id)->languages()->wherePivot('type', 'native')->attach($teach_id);
return redirect('/users/settings');
}
}
答案 0 :(得分:0)
您也可以手动填充多种关系的数据透视表。
创建模型语言用户
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class LanguageUser extends model
{
protected $fillable = ['user_id','language_id','type'];
}
然后填充:
public function store(Request $request,$id)
{
if($result->type=='native')
{
$pivot=new LanguageUser();
$pivot->user_id=$id;
$pivot->language_id=3;
$pivot->type='native';
$pivot->save();
}
else if($result->type=='learn')
{
$pivot=new LanguageUser();
$pivot->user_id=$id;
$pivot->language_id=4;
$pivot->type='learn';
$pivot->save();
}
else{//}
}