Laravel 5 嵌套关系

Laravel 5 nested relationship

我有 3 个 table,其中:

User: id | name
Products: id | name | user_id
Tracks: user_id | product_id

这些模型(tables)之间的关系是:

//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');
}

跟踪 table 如果用户想要跟踪产品,则使用。某种书签。

所以,当我在产品页面上时,$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.php

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

Track.php

public function product() {
    return $this->belongsTo('App\Product');
}

现在检查用户是否在跟踪产品

$product = App\Product::find($id);
$product->user->track()->where('product_id', $product->id)->first();

另一种方式

$user = App\User::find($id);
$user->track()->where('product_id', $product->id)->first();

并检查登录用户是否正在跟踪产品,您可以通过 Auth::user() 获取登录用户,所以

$user = Auth::user();
$user->track()->where('product_id', $product->id)->first();