2015-09-02 5 views
1

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

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

Я успешно подключил модели пользователей и пользователей. Нет проблем. Я получение Infos пользователя в модели пользователя с этим:

$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. Там не будет никаких проблем. Моя проблема в том, что я не смог получить country_name. Я не знаю, какое отношение использовать для этого. Я могу сделать это с использованием класса «DB», но тогда мне нужно использовать другие запросы для всех этих типов. Это не лучшее решение.

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

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

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

Edit: Я использую Laravel 5.1

ответ

1

Модель Страны относится к UserInfo. В вашей модели 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();  
+0

его возвращение нулевой –

+0

я отредактирован возвращение $ this-> belongsTo («App \ Страна», «country_id ', 'Я бы'); для возврата $ this-> belongsTo ('App \ Country', 'option_value', 'id'); Его работали со мной, thx много :) –

+1

, если вы примете мой запрос на редактирование, я буду отмечать как ваш пост. –