Правильный способ определения отношения hasManyThrough - PullRequest
1 голос
/ 01 августа 2020

у меня есть 3 таблицы:

Пользователь модель

|---------------------|------------------|
|      column         |     type         |
|---------------------|------------------|
|        id           |     uuid         |
|---------------------|------------------|

Отношения в модели:

public function properties()
{
   return $this->hasMany(Property::class, user_id)
}

public function favourite_properties()
{
    return $this->hasManyThrough(Property::class, FavouriteProperty::class, 'user_id', 'user_id')
}

Свойство модель

|---------------------|------------------|
|      column         |     type         |
|---------------------|------------------|
|        id           |     uuid         |
|---------------------|------------------|
|        user_id      |     uuid         |
|---------------------|------------------|

Отношения в модели:

public function user()
{
   return $this->belongsTo(User::class, 'user_id')
}
          
public function favourites()
{
   return $this->hasMany(FavouriteProperty::class, 'property_id')
}

FavouriteProperty модель

|---------------------|------------------|
|      column         |     type         |
|---------------------|------------------|
|        id           |     uuid         |
|---------------------|------------------|
|        property_id  |     uuid         |
|---------------------|------------------|
|        user_id      |     uuid         |
|---------------------|------------------|

Отношения в модели:

public function user()
{
   return $this->belongsTo(User::class, 'user_id')
}
          
public function property()
{
   return $this->belongsTo(Property::class, 'property_id')
}

Я хочу иметь доступ к избранным свойствам пользователя через модель FavouriteUser и разбивать результаты на страницы, пока я получал пустые результаты данных с помощью этого запроса, в таблице есть 4 записи, принадлежащие к FavouriteUser модель для текущего пользователя, но я не думаю, что делаю это правильно:

$user = User::where('id', Auth::user()->id)->firstOrFail();
$properties = $user->favourite_properties()->paginate(9);

return $properties;

1 Ответ

0 голосов
/ 01 августа 2020

Если вы следуете соглашению об именах Laravel, вам не нужно указывать внешние ключи в качестве параметра. Но если хотите, вот как:

favourite_properties(){
return $this->hasManyThrough( 
FavouriteProperty::class, 
Property::class,
'user_id', //Foreign key on properties table
'property_id', //Foreign key on favourite_properties table
'id',  //Local key on users table
'id') //Local key on properties table
}

Документация Laravels с примером: https://laravel.com/docs/7.x/eloquent-relationships#has -many-through

...