Laravel объединяет несколько отношений в один

В моем приложении три модели: 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

Решение

// 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;
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]