通过在其他字段上搜索类型来更新数据透视表 - Laravel

时间:2017-02-08 02:17:25

标签: laravel-5 eloquent laravel-5.3

我有3个表Users,Languages和Language_User,如下所示:

用户

ID

名称

...

语言

ID

语言

Language_User

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');
    }
}

1 个答案:

答案 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{//}
}