5

我正在尝试使用自定义的数据库结构构建 Laravel 应用程序。我有表types, units,content和一个名为 的数据透视表relations。表的结构relations是这样的:

---------------------------------------------
| id | relation_type | first_id | second_id |
---------------------------------------------
|  1 |   type_unit   |     1    |    2      |
---------------------------------------------
|  2 | unit_content  |     2    |    3      |
---------------------------------------------

换句话说,前三个表之间是多对多关系,第四个是所有关系的透视表。如何将 Eloquent 的BelongsToMany方法与此数据透视表结构一起使用,即如何仅选择与给定关系相关的数据透视表记录?例如,我将如何只使用 type_unit 关系:

class Type extends Eloquent {

    public function units()
    {
        return $this->belongsToMany('Unit', 'relations');
    }

}

但同时忽略 unit_content 关系?

4

1 回答 1

13

belongsToMany将接受第三和第四个论点。您可以在文档中看到它:http: //laravel.com/docs/eloquent#relationships

但是文档中没有的事情是,您可以通过链接查询构建器函数(例如 等)来约束您的where关系orderBy

所以你的代码会是这样的:

class Type extends Eloquent {

    public function units()
    {
        return $this->belongsToMany('Unit', 'relations', 'first_id', 'second_id')
          ->withPivot(['relation_type'])
          ->where('relations.relation_type', '=', 'type_unit');
    }

}
于 2013-07-20T23:13:37.087 回答