У меня проблемы с моделью 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
Модель 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();
Других решений пока нет …