我正在嘗試通過雄辯地創建一個下拉選單,從那里我可以通過下拉選單和次大陸到具有子下拉選單的國家去次大陸。關系是次大陸有很多國家。
楷模
次大陸
class Subcontinent extends Model
{
protected $guarded = [];
public function countries()
{
return $this->hasMany(Division::class, 'country_name', 'id');
}
}
國家
class Division extends Model
{
protected $table = 'divisions';
protected $fillable = [
'country_name', 'subcontinent_id'
];
public function subcontinent()
{
return $this->belongsTo(Subcontinent::class, 'country_name', 'id');
}
}
country 的表名是 Divisions,模型名也是 Division。
表國家/部門
Schema::create('divisions', function (Blueprint $table) {
$table->id();
$table->string('country_name');
$table->bigInteger('subcontinent_id');
$table->timestamps();
});
建庫
![此集合實體上不存在屬性 [countries]](https://img.uj5u.com/2021/11/02/fe2e2b2b7b7c4b7b8b89631ac8da1a9a.png)
![此集合實體上不存在屬性 [countries]](https://img.uj5u.com/2021/11/02/a7f4f2399be640d4a2fa487bb61c78c9.png)
$subcontinents = Subcontinent::orderBy('id', 'DESC')->get();
但是當我嘗試呼叫dd($subcontinents->countries)它時,它給了我屬性不存在的錯誤。
“此集合實體上不存在財產 [國家/地區]。”
和 $subcontinents = Subcontinent::find(1);
dd 仍然給出空值。我怎么能把次大陸稱為國家!
uj5u.com熱心網友回復:
您對關系方法中的第二個和第三個選項有誤解。對于belongsTo關系,第二個引數是子表的外鍵,第三個引數是父表的主鍵或參考鍵。你的部門模型關系應該是
public function subcontinent()
{
return $this->belongsTo(Subcontinent::class, 'subcontinent_id', 'id');
}
對于hasMany關系,第二個引數是子表中的外鍵。對于次大陸模型,關系將是
public function countries()
{
return $this->hasMany(Division::class, 'subcontinent_id', 'id');
}
當您使用時,您將$subcontinents = Subcontinent::orderBy('id', 'DESC')->get();獲得一個集合,而不是一個物件。您必須回圈以從中獲取值和關系資料。
foreach($subcontinents as $subcontinent) {
$subcontinent->$subcontinent_name;
$subcontinent->countries;
}
當你使用時,你$subcontinents = Subcontinent::find(1);會得到一個物件。您可以直接訪問其值。只需更新關系方法。屆時您將獲得價值$subcontinents->countries。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/344437.html
