【问题标题】:Laravel accessing properties through pivot tableLaravel 通过数据透视表访问属性
【发布时间】:2015-05-23 01:09:30
【问题描述】:

我正在尝试制作一个应用程序,其中用户可以拥有可变数量的配置文件字段和数据。因此,站点管理员可以将 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;
}

我是不是走错了路?

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

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

    受保护的 $table = "table_name"; 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(包括第一个新词在内的每个新词的首字母大写 - 没有下划线)

    祝你好运:)

    【讨论】:

    • 我已经在使用 $table 变量,就像那样,因为我使用生成器从绘图中生成所有模型和迁移,laravelsd.com 但是我确实想将所有内容更改为应该完成!
    • 好的。然后您可以将该方法添加到您的用户模型而不是您拥有的模型中,您应该没问题:)
    猜你喜欢
    • 2020-02-05
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 2019-02-19
    相关资源
    最近更新 更多