Laravel 类别映射关系

Laravel Categories Map Relationship

我有以下三个表,但我不知道如何在类别和其他数据类型之间建立关系,在本例中 'Page':

帖子:

post_id    | title        | slug
1          | Test         | test
2          | Another test | another test

catgory_map:

id | category_id | referrer_id | category_map_type
1  | 2           | 1           | Post
2  | 3           | 2           | Post
3  | 2           | 9           | Page

类别

id | name
1  | Laravel
2  | Zend2
3  | Phalcon

所以每当我阅读一个类别时,我都希望能够做这样的事情

foreach($category->destinations) ...

到目前为止,我一直在尝试使用 hasManyThrough,但没有成功。

您拥有的是一个 many-to-many relation,对关系进行了一些额外的过滤(对于 category_map_type)。试试这个:

Post 型号

public function categories(){
    return $this->belongsToMany('Category', 'category_map', 'referrer_id')
                ->where('category_map_type', 'Post');
}

类别模型

public function posts(){
    return $this->belongsToMany('Post', 'category_map', 'category_id', 'referrer_id')
                ->where('category_map_type', 'Post');
}

用法

$category = Category::find(1);
foreach($category->posts as $post){
    // ...
}

Post也是如此)


您可能还想查看 polymorphic many-to-many relations