在Laravel 4中创建多对多关系

时间:2013-09-02 02:49:44

标签: database polymorphism laravel laravel-4 eloquent

我需要在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

2 个答案:

答案 0 :(得分:3)

多态关系将于11月在Laravel 4.1中发布。

如果需要,您可以尝试切换到4.1分支并立即使用它们。但是在这个阶段我没有看到任何关于它们使用的具体文档 - 只有泰勒的推文。

See tweet here

答案 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
}

通过一些模型名称更改,上述内容几乎可以完全按照您的要求进行复制。