Laravel 5和EAV的关系

时间:2015-09-02 22:02:32

标签: php laravel relationship entity-attribute-value

我遇到了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

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();