【问题标题】:Laravel: How to make a relationship between two table that has a reference tableLaravel:如何在具有引用表的两个表之间建立关系
【发布时间】:2016-04-21 07:34:41
【问题描述】:

我有 3 张桌子。

人员、任务和项目

人员表中的每个人都可以分配到一个或多个项目。 Projects 表中的每个项目都可以分配一个或多个人员。

这是每个表的列:

  • 身份证
  • 姓名

作业:

  • person_id
  • project_id

项目

  • 身份证
  • 标题

我的问题是:在我的 Project 模型中,如何定义关系?

我想要的是能够获得分配给特定项目的所有人的姓名。

我需要:

$project->assignedPeople

所以我可以:

foreach($projects as $project)
$project->title
  foreach(projects->assignedPeople as $person)
  $person->name

我需要你的帮助 谢谢!

【问题讨论】:

    标签: php mysql laravel laravel-5.2


    【解决方案1】:

    实际上你需要多对多关系。

    你可以这样定义模型

    项目模型

    class Project extends Model {
    
        public function peoples()
        {
            return $this->belongsToMany('App\People');
        }
    }
    

    人员模型

    class People extends Model {
    
        public function projects()
        {
            return $this->belongsToMany('App\Project');
        }
    }
    

    现在您可以像这样访问分配给特定项目的所有人的姓名。

    $project->peoples
    

    你可以像这样运行你的 foreach 循环

    foreach($projects as $project) {
        echo $project->title;
        foreach(project->peoples as $person) {
            echo $person->name;
        }
    }
    

    希望它能解决你的问题。

    谢谢

    【讨论】:

    • 参考表在哪里进入这个解决方案?没有参考表,两个表都不知道在哪里查找。
    • @Sascha 引用表将根据关系自动生成/维护。但是,如果您想进行一些自定义,您也可以这样做。比如表名、列名变化等等。 ``` return $this->belongsToMany('App\Project', 'projects_peoples', 'project_id', 'people_id'); ```
    【解决方案2】:
    Inside Model Project
    
       class Projects extends Model {
    
        public function people()
        {
            return $this->hasMany('App\People');
        }
    
    }
    
    Inside Model People
    
        class People extends Model {
    
        public function project()
        {
            return $this->belongsToMany('App\Project');
        }
    
    }
    
    In case of custom joining table:
    
    class People extends Model {
    
        public function project()
        {
            return $this->belongsToMany('App\Project', 'Assignments', 'person_id', 'project_id');
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 2017-07-09
      • 2020-01-17
      • 2023-03-29
      相关资源
      最近更新 更多