2016-12-05 191 views
0

早上好,我在Eloquent的模型关系上遇到了一些麻烦,我需要链接那些具有中间表的文章和图像。在中间表中,我想添加文章和图片的ID,并且我想检索属于文章的所有图片,管理关系的最佳方式是什么?在此先感谢laravel雄辩中的一对多关系

+1

https://laravel.com/docs/5.3/eloquent-relationships#one-to-many Laravel有很好的文档记录,如果你阅读文档,你不需要问这个问题。 – Devon

回答

0

您可以使用morphMany()关系(Polymorphic Relationship),以解决您的问题是这样的:

UPDATE:表结构如下所示:

- articles 
    - id 
    - title 
    - content 
    - ... 

- images 
    - id 
    - owner_id 
    - owner_type (Here there can be - Article, Auction, User, etc) 
    - name 
    - mime_type 
    - ... 

多态性关系允许模型属于多于一个 其他模型上的单个关联。例如,想象一下 您的应用程序的用户可以对帖子和视频进行“评论”。使用 多态关系,可以为这两种情况都使用单个注释表 。

你的车型将是这样的:

class Article extends Model 
{ 

    public function images() 
    { 
     return $this->morphMany(Image::class, 'owner'); 
    } 

} 

class Image extends Model 
{ 

    public function owner() 
    { 
     return $this->morphTo(); 
    } 

} 

多个图像保存到一个文章,你可以这样做:

$article->images()->create([... inputs_arr ...]); 

,并获取它们,你可以做到这一点像:

$articleImages = Article::find($id)->images; 

希望这有助于!

+0

那么,它如何保存表格上的数据?它在哪里使数据库的关系?我在创建模型之前创建了数据库,因为我以前正在使用纯PHP。感谢:D –

+0

这个案件将会有两张表格。你的表格结构就像我上面更新的答案中所示。 –

+0

如果我使用与其他模型相关的图像表,比如说拍卖,用户等,不会有问题吗? –

3

您不需要使用数据透视表,因为它是one-to-many的关系。

只需使用hasMany()关系:

public function images() 
{ 
    return $this->hasMany('App\Image'); 
} 

然后用eager loading加载所有图片与文章:

$article = Article::with('images')->where('id', $articleId)->first();