![](/img/trans.png)
[英]Laravel Relationship - Additional fields in pivot table linking to additional models
[英]Laravel Models Pivot Table 1-1 Relationship should be 1-M
我的Laravel模型在這里遇到問題,我正在嘗試使用數據庫中已有的數據透視表,這是我正在使用的表的布局
客戶
工作
客戶的作業
我相信錯誤在我的模型中,我不完全理解雄辯的語法,不過我一直在嘗試其他幾種方法。 我想將主要對象保留在clients-jobs表中,以便對其進行索引。
這是我的模型:客戶
protected $table = 'clients';
public $timestamps = true;
protected $primaryKey = "id";
public function clientsjobs() {
return $this->belongsTo('ClientsJobs');
}
工作
protected $table = 'jobs';
protected $fillable = array('first_name', 'last_name', 'email');
protected $primaryKey = "id";
public function clientsjobs() {
return $this->belongsToMany('ClientsJobs');
}
ClientsJobs(也許我應該刪除此模型?我使用的是對嗎?)
protected $table = 'clients-jobs';
protected $primaryKey = "id";
public function clients() {
return $this->hasOne('Client', 'id');
}
public function jobs() {
return $this->hasOne('Job', 'id');
}
我用來嘗試顯示clients-jobs表的所有記錄的代碼在我的一個控制器中(謝謝sebastien)在這里:
$masterArray = array();
ClientsJobs::with('clients', 'jobs')->chunk(200, function($records) use (&$masterArray) { //Chunk Retrieves 200 Records at a time
foreach ($records as $record) {
$masterArray[] = array(
'id' => $record->id, // id
'client_name' => !empty($record->clients) ? $record->clients->fname : "Unknown",
'job_name' => !empty($record->jobs) ? $record->jobs->name : "Unknown",
'wage' => $record->wage,
'productivity'=> $record->productivity,
);
}
});
return $masterArray;
該代碼適用於前兩個記錄,但此后“未知”,我很確定這是因為應用程序認為這是1:1關系(我只有2個Users和2個Jobs作為虛擬數據)。
在此先感謝您可以提出的任何建議,如果您看到我做的令人討厭的事情,請告訴我
您應該刪除ClientsJobs
模型,這是不必要的。 Laravel的belongsToMany
關系在正確設置后將處理數據透視表本身。 看一眼:
http://laravel.com/docs/4.2/eloquent
多對多關系是更復雜的關系類型。 這種關系的一個示例是具有多個角色的用戶,其中這些角色也由其他用戶共享。 例如,許多用戶可能具有“管理員”角色。 此關系需要三個數據庫表:用戶,角色和role_user。 role_user表是從相關模型名稱的字母順序得出的,並且應具有user_id和role_id列。
您的數據透視表應采用Laravel的約定命名,即采用每個模型名稱(單數)並將它們與下划線字符( client_job
)連接在一起,或者您可以在關系中指定數據透視表的名稱等。 Laravel的文檔提供了以下示例,該示例使您可以覆蓋默認數據透視表名稱和相應的鍵:
return $this->belongsToMany('Role', 'user_roles', 'user_id', 'foo_id');
就您而言,如果您是一對一關系,那么您實際上並不需要數據透視表。 您可以只實現hasMany
和belongsTo
關系。 也就是說,一個客戶屬於一個工作,但是一個工作可以有很多客戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.