在我的应用中,有三种模式:User
,Product
和Retailer
。用户可以选择与一个Retailer
相关联。
每个Product
属于一个User
,也可能属于一个零售商。
然后,用户应该能够访问属于他们的所有Product
,以及属于他们所关联的零售商的所有产品(如果有的话)。
基本上这意味着我需要创建两个关系并以某种方式统一它们。
public function products()
{
// Via column `user_id` in products table
return $this->hasMany('App\Product');
}
// And:
public function products()
{
// Via column `user_id` in products table
return $this->hasManyThrough('App\Product', 'App\Retailer');
}
我如何将这两种关系统一为一体?
答案 0 :(得分:1)
// User model
public function products()
{
return $this->hasMany('App\Product');
}
public function retailer()
{
return $this->belongsTo('App\Retailer');
}
// Product model
public function user()
{
return $this->belongsTo('App\User');
}
public function retailer()
{
return $this->belongsTo('App\Retailer');
}
// Retailer Model
public function products()
{
return $this->hasMany('App\Product');
}
public function users()
{
return $this->hasMany('App\User');
}
用法:
// with one user
$user = User::find(1);
$retailerProducts = $user->retailer->products;
foreach( $retailerProducts as $product )
{
echo $product->id;
}
// When getting multiple users, use eager loading to get all products in one query
$users = User::with('retailer.products')->get();
foreach( $users as $user )
{
foreach( $user->retailer->products as $product )
{
echo $product->id;
}
}