【发布时间】:2015-07-05 15:40:10
【问题描述】:
我有 3 张桌子,其中:
User: id | name
Products: id | name | user_id
Tracks: user_id | product_id
这些模型(表)之间的关系是:
//User.php*************************************************
public function products() {
return $this->hasMany('App\Product');
}
public function track() {
return $this->hasMany('App\Track');
}
//Product.php*************************************************
public function user() {
return $this->belongsTo('App\User');
}
public function track() {
return $this->belongsTo('App\Track');
}
//Track.php*************************************************
public function products() {
return $this->hasMany('App\Product');
}
public function user() {
return $this->belongsTo('App\User');
}
如果用户想要跟踪产品,则使用跟踪表。某种书签。
所以,当我在产品页面$product = App\Product::find(1) 上时,如果我想回显用户名,我会使用$product->user()->name,但是如果我想知道用户是否已经在跟踪当前产品,那么当我这样做时$product->user()->track()->get()我收到这个错误:
Call to undefined method Illuminate\Database\Query\Builder::track()
如果我使用$product->user()->with('track')->get(),我不会收到错误消息,但如果用户已经在跟踪产品,我会得到不包含信息的用户对象。
我如何知道用户是否已经在跟踪产品?
【问题讨论】:
-
对关系使用魔法访问器 (
$product->user) 将为您提供该类型的模型,而方法 ($product->user()) 为您提供Illuminate\Database\Query\Buider的实例。有方法track()但模型有。所以$product->user->track()将允许您使用该方法。甚至$product->user->track也可以。 -
你试过了吗?
$product->track->user -
太棒了。我学到了一些新东西。谢谢。我已经尝试过了,我注意到如果我执行 App\Product::find(1)->user->track 它将带来发布产品的用户添加书签的所有产品。查询午餐是 select * from tracking where tracking.user_id = 4。4 是发布产品的用户 ID。这是第一个问题。其次,如果登录的用户(而不是发布产品的用户)正在跟踪产品,那么我现在想这样做。抱歉,我的问题中的信息不完整。
-
@Alexandros $product->track->user 返回错误:尝试获取非对象的属性
标签: laravel eloquent relationship