我遇到了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;
我的问题就在那里。我在option_id和option_value中存储了“country_id”。
例如:
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;
编辑:我正在使用laravel 5.1
答案 0 :(得分:1)
Country模型属于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();