我正在尝试创建一个应用程序,其中用户可以拥有可变数量的配置文件字段和数据。因此,网站管理员可以将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;
}
我是否会走错路?
答案 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(每个新单词包括第一个单词的首字母大写 - 没有下划线)
祝你好运:)