Laravel通过数据透视表访问属性

时间:2015-05-22 16:37:59

标签: php laravel eloquent

我正在尝试创建一个应用程序,其中用户可以拥有可变数量的配置文件字段和数据。因此,网站管理员可以将location添加到字段列表中,然后添加其模型中包含location的所有用户。

这是我的数据库

Table  : users
Columns: id | name | email
Sample : 1  | Adam | example@example.com

Table  : user_custom_field
Columns: id | slug | name
Sample : 1  | location | Location

Table  : user_custom_data
Columns: id | user_id | field_id | data
Sample : 1  | 1       | 1        | United Kingdom

我已经尝试过对hasMany进行后期处理,但只能使其工作1个结果,我无法让它适用于所有用户。

理想情况下,我想访问自定义字段,例如location,如:

$user->location

$user->custom->location

到目前为止,这是我的非工作模型......

public function custom()
{
    $custom_data = $this->hasMany('App\User_Custom_Data', 'user_id', 'id')
                        ->join('user_custom_field', 'user_custom_data.field_id', '=', 'user_custom_field.id');
    return $custom_data;
}

我是否会走错路?

1 个答案:

答案 0 :(得分:0)

我相信你这里唯一的问题是表格和Eloquent模型的命名。因为你有非常具体的表名,我建议你在所有这些模型中声明表:

protected $ table =" table_name&#34 ;; http://laravel.com/docs/5.0/eloquent#basic-usage

如果你这样做,那么你将获得很多来自Eloquent的信息。我可能不是100%,因为我目前不确定你的名字,但是,你的User.php(用户口才模型)可以有这个方法:

public function customAttributes()
{
return $this->hasMany('App\User_Custom_Data');
}

**不要忘记你的模型User_Custom_Data.php中你需要添加

protected $table = "user_custom_data";

如果你如上所述,你不需要指定用于关系的whihc列。

另外,请注意,类和对象的命名最佳实践是PascalCase(每个新单词包括第一个单词的首字母大写 - 没有下划线)

祝你好运:)