属性 [国家/地区] 在此集合实例上不存在
Property [countries] does not exist on this collection instance
我正在尝试通过 eloquent 创建一个下拉菜单,从那里我可以使用下拉菜单转到次大陆,然后从次大陆转到具有子下拉菜单的国家/地区。关系是次大陆有很多国家.
型号
次大陆
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');
}
}
table国名是division,型号也是Division
Table
country/division
Schema::create('divisions', function (Blueprint $table) {
$table->id();
$table->string('country_name');
$table->bigInteger('subcontinent_id');
$table->timestamps();
});
数据库形成
$subcontinents = Subcontinent::orderBy('id', 'DESC')->get();
但是当我尝试调用 dd($subcontinents->countries)
时它给我 属性 不存在错误。
"Property [countries] does not exist on this collection instance."
和$subcontinents = Subcontinent::find(1);
dd 仍然给出空值。我怎样才能将次大陆呼叫到国家!
你对关系法中的第二个和第三个选项有误解。对于 belongsTo 关系,第二个参数是子 table 的外键,第三个参数是父 table 的主键或引用键。
你的部门模型关系应该是
public function subcontinent()
{
return $this->belongsTo(Subcontinent::class, 'subcontinent_id', 'id');
}
对于 hasMany 关系,第二个参数是子 table 中的外键。对于次大陆模型,关系为
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
之前获得值。
我正在尝试通过 eloquent 创建一个下拉菜单,从那里我可以使用下拉菜单转到次大陆,然后从次大陆转到具有子下拉菜单的国家/地区。关系是次大陆有很多国家.
型号
次大陆
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');
}
}
table国名是division,型号也是Division
Table country/division
Schema::create('divisions', function (Blueprint $table) {
$table->id();
$table->string('country_name');
$table->bigInteger('subcontinent_id');
$table->timestamps();
});
数据库形成
$subcontinents = Subcontinent::orderBy('id', 'DESC')->get();
但是当我尝试调用 dd($subcontinents->countries)
时它给我 属性 不存在错误。
"Property [countries] does not exist on this collection instance."
和$subcontinents = Subcontinent::find(1);
dd 仍然给出空值。我怎样才能将次大陆呼叫到国家!
你对关系法中的第二个和第三个选项有误解。对于 belongsTo 关系,第二个参数是子 table 的外键,第三个参数是父 table 的主键或引用键。 你的部门模型关系应该是
public function subcontinent()
{
return $this->belongsTo(Subcontinent::class, 'subcontinent_id', 'id');
}
对于 hasMany 关系,第二个参数是子 table 中的外键。对于次大陆模型,关系为
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
之前获得值。