简体   繁体   English

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

[英]Updating Pivot table by searching type on additional field - Laravel

I have 3 tables Users, Languages and Language_User as shown below: 我有3个表Users,Languages和Language_User,如下所示:

Users 用户

id ID

name 名称

... ...

Languages 语言

id ID

language 语言

Language_User Language_User

id ID

user_id 用户身份

language_id LANGUAGE_ID

type('learn','native') 键入(“学习”,“天然”)

I would like to update language_id for both the type but depending on the type. 我想更新两种类型的language_id,但取决于类型。

So, if $user = User::find($id); and type is native 所以,如果$user = User::find($id); and type is native $user = User::find($id); and type is native enter language_id as 3 (let's say) $user = User::find($id); and type is native输入language_id as 3 (让我们说)

similarly, if type is learn enter language_id as 4 (let's say) which comes from the form of type PATCH. 类似地, if type is learnif type is learn输入language_id as 4 (假设)来自PATCH类型的形式。

I dont get it how to use this and add extra check for type: $lang = User::find($id)->languages()->updateExistingPivot($languageId, $attributes); 我不知道如何使用它并添加类型的额外检查: $lang = User::find($id)->languages()->updateExistingPivot($languageId, $attributes);

OR 要么

App\User::find(1)->languages()->save($language, ['language_id' => $learn]);

How to check for type in pivot table before overriding the data. 如何在覆盖数据之前检查数据透视表中的类型。

I tried this: 我试过这个:

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

You can also manually populate the pivot table of manytomany relations. 您还可以手动填充manytomany关系的数据透视表。

Create Model LanguageUser 创建模型语言用户

<?php
    namespace App;
    use Illuminate\Database\Eloquent\Model;
    class LanguageUser extends model 
    {
        protected $fillable = ['user_id','language_id','type'];
    }

And then populate: 然后填充:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM