我需要在laravel 4中创建多态 多对多关系,并且我不完全确定这是否可行。
e.g。
TagModel
- id
- title
- slug
PostModel
- id
- title
- slug
- content
PageModel
- id
- title
- slug
- content
这当然会有tags_tagable数据透视表这样
tags_tagable
- tag_id
- tagable_id
- tagable_type
答案 0 :(得分:3)
多态关系将于11月在Laravel 4.1中发布。
如果需要,您可以尝试切换到4.1分支并立即使用它们。但是在这个阶段我没有看到任何关于它们使用的具体文档 - 只有泰勒的推文。
答案 1 :(得分:0)
Laravel 4.1现在支持多种多样的关系。
下面的示例显示了我如何实现与产品和帖子共享照片。
DB Schema
照片
id integer
filename string
alt string
photoable
id integer
photoable_id integer
photoable_type string
模型
照片模特
class Photo extends Eloquent
{
public function products(){
return $this->morphedByMany('Product', 'photoable');
}
public function posts(){
return $this->morphedByMany('Post', 'photoable');
}
}
产品型号
class Product extends Eloquent
{
public function photos(){
return $this->morphToMany('Photo', 'photoable');
}
}
发布模型
class Post extends Eloquent
{
public function photos(){
return $this->morphToMany('Photo', 'photoable');
}
}
通过上述内容,我可以访问附加到产品的所有照片,如下所示:
$product = Product::find($id);
$productPhotos = $product->photos()->all();
我还可以迭代显示所有照片作为任何模型集合。
foreach ($productPhotos as $photo)
{
// Do stuff with $photo
}
通过一些模型名称更改,上述内容几乎可以完全按照您的要求进行复制。