eloquent - Laravel 5 nested relationship -
i have 3 tables, with:
user: id | name products: id | name | user_id tracks: user_id | product_id relationships between these models (tables) are:
//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'); } track table used if user want track product. kind of bookmark.
so, when i'am on product page, $product = app\product::find(1), if want echo user name, $product->user()->name, if want know if user tracking current product, when $product->user()->track()->get() receive error:
call undefined method illuminate\database\query\builder::track() if $product->user()->with('track')->get(), don't error, user object not contain info if user tracking product.
how can know if user tracking product?
first, of relationship should these
product.php
public function track() { return $this->hasmany('app\track'); } track.php
public function product() { return $this->belongsto('app\product'); } now check if user tracking product
$product = app\product::find($id); $product->user->track()->where('product_id', $product->id)->first(); another way
$user = app\user::find($id); $user->track()->where('product_id', $product->id)->first(); and check if logged in user tracking product, can logged in user auth::user() , so
$user = auth::user(); $user->track()->where('product_id', $product->id)->first();
Comments
Post a Comment