我的应用中有 User , Review 和 Product 型号 .
关系是:
用户hasMany评论评论belongsTo用户产品hasMany评论评论belongsTo产品
我的表结构是
产品表id |名字|价钱
评论表ID |审查|评级| user_id | PRODUCT_ID
用户表ID |名字|电子邮件|密码
访问特定产品页面时,我希望显示该产品的所有评论以及撰写这些评论的用户 . 所以我尝试过:
$product = Product::where('id','=',$id)->with('reviews')->with('users')->get();
当然这不起作用,因为 Product
与 Users
没有任何直接关系 .
然后我尝试了Has Many Through关系 . 在产品型号中:
public function users()
{
return $this->hasManyThrough('App\User', 'App\Review');
}
这需要 Reviews
表中的 product_id
列 .
它还期望 Users
表中的 review_id
列不存在(并且将其放在那里是没有意义的,因为用户可以有很多评论) .
那么这样做的正确方法是什么?
如何获得特定产品的所有评论以及撰写评论的用户?
2 回答
您可以使用点
.
将关系链接到急切加载,如下所示:或者因为
reviews.user
也需要加载reviews
,你也可以省略reviews
:然后,您可以按照预期简单地访问用户:
我在Laravel文档中找到了这个 . https://laravel.com/docs/5.6/eloquent-relationships#eager-loading
如果您应用延迟加载,这应该有效 . 但是,如果您使用的是_1179919_,则应该能够按需加载用户信息 .