我有以下結構:如何使用具有複合外鍵的hasMany()方法?
branch_has_language表代表了語言和分支機構之間的多對多關係。另一方面,產品屬於branch_has_language記錄。因此,可以爲特定語言和分支創建產品,它們在branch_has_language表中一起存在。
我的問題是如何創建模型來表示這種關係。目前,我有以下型號:
分公司模型
class Branch extends Model
{
protected $table = "branches";
public function languages()
{
return $this->belongsToMany("\App\Language", "branch_has_language");
}
public function users()
{
return $this->belongsToMany("\App\User", "branch_has_user");
}
public function newPivot(Model $parent, array $attributes, $table, $exists) {
if ($parent instanceof Language) {
return new BranchLanguage($parent, $attributes, $table, $exists);
}
return parent::newPivot($parent, $attributes, $table, $exists);
}
}
語言模型
class Language extends Model
{
protected $table = "languages";
public function branches()
{
return $this->belongsToMany("\App\Branch", 'branch_has_language');
}
public function newPivot(Model $parent, array $attributes, $table, $exists) {
if ($parent instanceof Branch) {
return new BranchLanguage($parent, $attributes, $table, $exists);
}
return parent::newPivot($parent, $attributes, $table, $exists);
}
}
BranchLanguage透視模型
class BranchLanguage extends Pivot
{
protected $table = 'branch_has_language';
public function branch()
{
return $this->belongsTo("\App\Branch");
}
public function language()
{
return $this->belongsTo("\App\Language");
}
public function products()
{
return $this->hasMany("\App\Product");
}
public function systems()
{
return $this->hasMany("\App\System");
}
public function items()
{
return $this->hasMany("\App\Item");
}
}
然而,當我想打個電話給products()
方法在BranchLanguage
班,我得到了一個錯誤,說"Column products.branch_id does not exists"
。這是對的。我需要在hasMany()
方法中指定外鍵。但是我的外鍵是複合的。
branch_has_language_branch_id
和branch_has_language_language_id
列建立外鍵。因此我無法在hasMany()
方法中定義它。
能否請你幫我解決這個問題?
你說得對。我的頭腦在Laravel中太多了,並且無法意識到數據庫模式中存在「錯誤」。謝謝! –
它總是發生在我身上,別擔心=] – phaberest