代码之家  ›  专栏  ›  技术社区  ›  Anonymus_goat

如何将3表与Laravel中的数据透视表连接?

  •  3
  • Anonymus_goat  · 技术社区  · 6 年前

    (首先为我的英语感到抱歉)

    也许三向透视表不是解决我问题的最佳方案,但我不知道。 所以我有一个 项目 表和a 成员 桌子一个项目可以有很多成员,这些成员可以在其他项目上工作。所以我创建了一个 member\u项目 表,其中存储了project\u id和member\u id。

    我需要升级我的数据库,因此如果我将一个项目与一个成员连接,我需要设置该成员在该项目中的位置(所有者、参与者等)。所以我的第一个想法是我有另一张桌子和模型: 位置 ,带有ID和职位名称,我必须用position_ID字段升级我的member_project表。但是怎么做呢?这是最好的解决方案吗?因为有了这个,我可以为多个职位添加相同的project\u id和member\u id,我不想这样。我想将一个项目与一个职位的成员联系起来。该项目可以有多个不同职位的成员,一个成员可以作为该项目的所有者为一个项目工作,但可以作为一个工人为另一个项目工作。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Chirag Patel    6 年前

    要定义此关系,需要三个数据库表:projects、members和project\u member。

    对于 成员的位置 您可以添加额外的列 位置 在数据透视表中(project\u成员)

    你必须定义 成员 方法打开 项目 型号:

    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class User extends Model
    {
        /**
         * The members that belong to the project.
         */
        public function members()
        {
            return $this->belongsToMany('App\Member')->withPivot('position');
        }
    }
    

    在成员模型中,必须定义关系的倒数:

    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Member extends Model
    {
        /**
         * The projects that belong to the member.
         */
        public function projects()
        {
            return $this->belongsToMany('App\Project')->withPivot('position');
        }
    }
    

    定义关系后 雄辩的 方法将有助于检索集合。

    有关多对多关系的更多信息,请参阅 link

    将关系附加到模型时,可以传递一组附加数据(在您的情况下 位置 )要插入中间表:

    $project->members()->attach($memberId, ['position' => "worker"]);
    

    代替 工人 您可以用任何值传递变量$position。

    对于其他多对多技术,您将从这里获得信息 many to many relationships