Я использую Laravel 5.8 и пытаюсь выяснить, как определить отношения и получить нужные данные.
У меня есть эти три таблицы.
Users: id, name, email
Preferences: id, name
Пример данных,
1, Vegetarian Only
2, Non-Veg Only
3, No preferences
4, Vegan Only
UserPreferences: id, user_id,preference_id, approved ('Yes', 'No')
Я хочу получить доступ ко всем настройкам учетной записи пользователя. Это мои классы моделей.
class User extends Model
{
public function preferences()
{
return $this->hasMany('App\UserPreference', 'user_id', 'id');
//model, foreign_key, local_key
}
}
class Preference extends Model
{
// just default empty model class
}
class UserPreference extends Model
{
// just default empty model class
}
Когда я делаю
$user = User::find(134);
$pref = $user->preferences()->get();
dd($pref);
Когда я делаю $pref = $user->preferences()->get();
, он включает все поля из таблицы UserPreferences выше, но я хочу включить name
в качестве prefName из таблицы preferences
.
Я не уверен, как это сделать. Не могли бы вы помочь мне правильно определить отношения?
Обновление
В основном, $pref = $user->preferences()->get();
выполняет запрос как
SELECT * FROM UserPrefererences WHERE user_id=134
Тем не менее, я хочу быть в состоянии достичь результата из этого запроса -
SELECT *, pf.name pref_name FROM UserPrefererences upf INNER JOIN Preferences pf ON pf.id = upf.preference_id WHERE upf.user_id=134