簡體   English   中英

Laravel通過數據透視表訪問屬性

[英]Laravel accessing properties through pivot table

我正在嘗試創建一個應用程序,其中用戶可以具有數量可變的配置文件字段以及數據。 因此,站點管理員可以將例如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;
}

我在這里走錯了路嗎?

我相信,這里唯一的問題是表和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(每個新單詞,包括第一個單詞,都帶有大寫字母的第一個字母-不帶下划線)

祝好運 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM