了解Laravel Eloquent和传统的表映射

时间:2016-10-17 10:17:44

标签: php laravel eloquent

我试图理解laravels雄辩的映射功能。 如果我有3张桌子:

Article
Asset
ArticleAssetMap

文章:简单的表格,ID,标题,正文,日期等。

资产:资产路径,日期等

ArticleAssetMap:两个列。 article_id,asset_id

我需要了解如何向我的模型描述当我请求所有或部分文章时,检查地图表以及如果找到了地图,那么也获得资产......

我已经为上面的所有表格提供了模型,并且认为它与雄辩的onetomany / belongssto等有关...但是找不到合适的教程可以帮助我解决这个问题。 ..我是愚蠢的..有一种很好的方式可以得到它吗?

2 个答案:

答案 0 :(得分:1)

将您的第三个表命名为article_asset,然后执行以下操作。

在您的Article班级

// if one article has many assets
public function assets()
{
    return $this->hasMany(Asset::class);
}

// if one article has only one assets
public function asset()
{
    return $this->hasOne(Asset::class);
}

在您的Asset班级

如果资产属于一篇文章

public function article()
{
    return $this->belongsTo(Article::class);
}

如果资产属于许多文章

public function articles()
{
    return $this->belongsToMany(Article::class);
}

你现在好了。

答案 1 :(得分:0)

您也可以通过将其他参数传递给hasMany方法来覆盖外键和本地键:

return $this->hasMany('App\Comment', 'foreign_key');

return $this->hasMany('App\Comment', 'foreign_key', 'local_key');

https://laravel.com/docs/5.3/eloquent-relationships#one-to-many