【问题标题】:How to remove and update data on relations table using laravel eloquent?如何使用 laravel eloquent 删除和更新关系表上的数据?
【发布时间】:2020-01-18 03:32:49
【问题描述】:

我有三张桌子。他们是,

  users
id    name
1    personA
2    personB
3    personC

  skills
id   name
1    html
2    css
3    javascript

   userskills
userid   skills_id
2           3
2           1
1           2
1           3

我通过[2,1] and the user id 2 之类的请求获取数据。 On the user skills table in userid 2 there are skills_id3,1. Now i have to remove skills_id 3 and insert skills_id 2 on the userid 2.

如何通过 laravel eloquent 方法实现。

【问题讨论】:

    标签: laravel api eloquent


    【解决方案1】:

    您的问题有点模棱两可,但我们假设您获得的用户 id 为 2,而您想要从 userskills 中删除的技能是 2,1

    删除

    UserSkills::where(['userid' => 2 ])->whereIn('skills_id',[2,1])->delete();
    

    用于插入

    UserSkills::create(['skills_id' => 2, 'userid' => 2 ]);
    

    【讨论】:

      【解决方案2】:

      由于您有一个数据透视表,您可以使用belongsToMany 关系。在 User 模型中添加关系

      public function skills()
          {
              return $this->belongsToMany(Skill::class, 'userskills','userid', 'skills_id');
              //userskills is the pivot table  
          }
      

      现在使用sync 方法进行更新。

      $user = User::findOrFail(2); //your request id
      $user->skills()->sync([1, 2]); //request array
      

      这将从数据透视表中删除 3 并在表中添加 2。

      在here了解更多关于这种关系的信息

      【讨论】:

      • 它可以工作,但是它将数据保存在同一列中,例如 1,2,但是我们希望像 userskills 表一样单独创建字段。你对@zahid hasan emon 有什么想法吗
      • 它应该像你说的那样工作。单独的 id 的单独行。你能告诉我你是怎么做到的吗?
      • 我的做法和你上面说的一样
      • 我发现我的错误在哪里。我将我的请求值转换为整数,它工作正常。谢谢你的回答
      【解决方案3】:

      使用关系的更简单的方法是

      $user->skills()->sync([2, 1]);
      

      同步将删除同步方法中不存在的那些技能。

      【讨论】:

        猜你喜欢
        • 2015-05-14
        • 1970-01-01
        • 2017-03-30
        • 2016-07-22
        • 2020-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多