Laravel 5 и EAV отношения

У меня проблемы с моделью EAV. В принципе; у меня есть три стола. Пользователь, UserInfo, Страна.

User                userinfo               Country
---------           ------------           ------------
id                  id                     id
username            user_id                country_name
pass                option_id
etc                 option_value

Я успешно соединил модели user и userinfo. Там нет проблем.
Я получил пользовательскую информацию в пользовательской модели с этим:

$this->info->where('option_id', $key)->first()->option_value;

Моя проблема тут как тут. Я храню «country_id» в option_id и option_value.

В примере:

userinfo
--------
id                  1
user_id             5
option_id           country_id
option_value        3

Я запускаю этот запрос от модели пользователя

$this->info->where('option_id', 'country_id')->first()->option_value;

Возвращает 3. Нет проблем. Моя проблема в том, что я не могу получить название страны.
Я не знаю, какие отношения использовать для этого.
Я могу сделать это с помощью класса «DB», но тогда мне нужно использовать другие запросы для всех этих типов. Это не лучшее решение.

Кто-нибудь может мне помочь?

Изменить: я ищу как это решение (если это возможно):

$this->info->where('option_id', $key)->first()->option_value->country_name;

Изменить: я использую Laravel 5.1

1

Решение

Модель Country принадлежит пользовательской информации.
В вашей модели userinfo вы должны определить отношения.

Класс UserInfo

public function country()
{
return $this->belongsTo('App\Country', 'local_key', 'parent_key');
}

В этом случае ваш 'local_key' было бы 'option_id' и ваш 'parent_key' было бы 'id',

После того как вы определили отношения, вы можете получить все атрибуты страны следующим образом:

$this->info->where('option_id', $key)->first()->country()->get();
1

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

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

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