Laravel 4.1 现在支持多态多对多关系。
下面的示例显示了我如何实现与产品和帖子共享照片。
数据库架构
相片
id integer
filename string
alt string
可拍照的
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
}
只需更改一些型号名称,上述内容几乎可以完全按照您的要求进行复制。