Laravel将多个关系统一为一个

时间:2016-03-03 09:30:08

标签: php laravel relation

在我的应用中,有三种模式:UserProductRetailer。用户可以选择与一个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');
}

我如何将这两种关系统一为一体?

1 个答案:

答案 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;
    }
}