当前位置: 首页 > 知识库问答 >
问题:

如何基于Laravel中多对多关系中的额外外键过滤响应?

经昱
2023-03-14

我在拉雷维尔的这种多对多关系中过得很艰难。我有一个多对多的关系,项目和人。我还有第三个表roles(有两列:id、name),其中包含一个人在项目中可以扮演的角色(在本例中为“actor”、“director”等)。透视表person\u project有“person\u id”、“project\u id”和“role\u id”列。我成功地让所有与项目相关的人员使用

$project = Project::find($id);
$project->persons;

但是我怎么能让人在项目中扮演特定的角色呢?我该如何挽救这样的关系?

模型

// Project.php

class Project extends Eloquent {

    protected $table = 'projects';
    public $timestamps = false;

    public function persons() {
        return $this->belongsToMany('Person');
    }
}

// Person.php

class Person extends Eloquent {

    protected $table = 'persons';
    public $timestamps = false;

    public function projects() {
        return $this->belongsToMany('Project');
    }
}

共有2个答案

廖招
2023-03-14

尝试以下方法之一:

如果您使用的是Laravel 4.1:

$project = Project::whereHas('persons', function($q)
{
    $q->where('role_id', 1);

})->get();

Laravel 4和4.1:

$project = Project::with(array('persons' => function($query)
{
    $query->where('role_id', 1);
}))->get();
祁建业
2023-03-14

本文有助于找出关系的检索方法。Eloquent的withPivot()和join()方法是使其工作的关键。

// In the Project model

public function persons() {
    return $this->belongsToMany('Person')
                ->withPivot('role_id')
                ->join('roles', 'role_id', '=', 'roles.id');
}

我从Laravel的文档中找到了插入部分:http://laravel.com/docs/eloquent#inserting-相关模型在本例中,Input::get('directors')是一个选择连接到“director”角色的person_ID数组。输入::get('actors')的处理方式相同。

// Within the update method of the Projects controller

foreach (Input::get('directors') as $directorId) {
    $project->persons()->attach($directorId, array('role_id' => 1)); // roles.id 1 = "director"
}

foreach (Input::get('actors') as $actorId) {
    $project->persons()->attach($actorId, array('role_id' => 2)); // roles.id 2 = "actor"
}
 类似资料:
  • 我有3个模型在我的项目: 用户型号代码: 职业标准守则 迁移: 用户职业模型代码 迁移: 当我尝试这个代码时,我通过他的名字搜索用户,并得到职业名称,然后计算该职业的用户。 代码: 我收到错误消息: 照明\数据库\查询异常:SQLSTATE[23000]:完整性约束违反:1052列'id'在其中子句是含糊不清的(SQL:选择*从存在的职业(选择*从用户内连接user_professionsuser

  • 我想使用XML映射在Hibernate中映射多对多的关系。 我有两个类,和。我想创建一个链接表女巫将包含复合键和3个额外的列

  • 我需要支持一个涉及以下实体的场景(使用JPA): 用户 一个用户可以有多个帐户,一个帐户可以在多个用户之间共享,这是迄今为止的标准@ManyToMany关系。 一个用户可以为每个帐户拥有一组不同的角色,一个角色可以在多个用户之间共享。 我遵循了这个实践,它解释了一种用额外列映射多对多关联的方法,但我不确定我是否得到了它。 用户实体: 账户实体: 用户帐户实体: 用户帐号: 我正在创建一个新用户并尝

  • 问题内容: 我需要使用类别表过滤查询,该类别表与另一个表具有many2many关系。是否可以过滤与many2many关系的查询? 表具有与表相关的many2many字段,或者说伙伴可以具有许多类别。我需要的是过滤具有类别“业务”或“零售”的表。如果没有任何这些类别,则不应显示。 此外还有另外一个领域是,有关系有: 具有以下关系的字段: 到(many2many) 到(one2many) (字符) 具

  • 我有两个实体。我想在持久化所有者实体时级联插入子实体,并将子实体的SSO_ID设置为生成器为所有者生成的实体。 ID类是: 相反,我得到了一个错误: 插入hub_users_emails(user_sso_idemail_typesso_idstart_dateuser_mail)值 (?, ?, ?, ?, ?) (等) 绑定参数[1]as[BIGINT]-[1234837655]= (等) 将

  • 我有两个实体用户和组,两个实体之间的关系是多对多。当我调用时,我得到了group的用户列表。但是当我调用时,我没有得到包含用户详细信息的组列表。