簡體   English   中英

Laravel Models Pivot表1-1關系應為1-M

[英]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');

就您而言,如果您是一對一關系,那么您實際上並不需要數據透視表。 您可以只實現hasManybelongsTo關系。 也就是說,一個客戶屬於一個工作,但是一個工作可以有很多客戶。

暫無
暫無

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

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