在模型中附加 属性 内部急切加载
Eager loading inside appending property in model
我想将 category_id
追加到 seat
集合中,但我需要使用预先加载或关系来填充它。
我哪里做错了?
座椅型号:
class Seat extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
public $appends = ['category_id'];
protected $fillable = [
'seat_name',
'seat_url',
'logo_src',
];
public function getCategoryIdAttribute()
{
return $this->hasMany(AdSeatCategories::class);
}
}
当我 运行 Seat::all();
时,我得到 {}
的 category_id
作为回应。
响应示例:
{
"id": 95,
"seat_name": "gtest",
"seat_url": "http://ooop.com",
"logo_src": null,
"category_id": {},
},
看起来你的 getCategoryIdAttribute()
是 return 关系,当你想要它到 return 集合时,请务必这样调用 get()
:
public function getCategoryIdAttribute()
{
return $this->hasMany(AdSeatCategories::class)->get();
}
或者,也许您想要一个关系和一个属性:
public function categories()
{
return $this->hasMany(AdSeatCategories::class);
}
public function getCategoryIdsAttribute()
{
return $this->categories()->get()->pluck('id');
}
您应该将关系与预先加载的属性分开。
class Seat extends Model
{
public $appends = ['category_id'];
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'seat_name',
'seat_url',
'logo_src',
];
public function getCategoryIdAttribute()
{
return $this->categories()->pluck('id');
}
public function categories()
{
return $this->hasMany(AdSeatCategories::class);
}
}
使用关系 categories
的更好解决方案是调用模型 Seat
。
class Seat extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'seat_name',
'seat_url',
'logo_src',
];
public function categories()
{
return $this->hasMany(AdSeatCategories::class);
}
}
在控制器中执行:
$seats = Seat::with('categories:id')->get();
我想将 category_id
追加到 seat
集合中,但我需要使用预先加载或关系来填充它。
我哪里做错了?
座椅型号:
class Seat extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
public $appends = ['category_id'];
protected $fillable = [
'seat_name',
'seat_url',
'logo_src',
];
public function getCategoryIdAttribute()
{
return $this->hasMany(AdSeatCategories::class);
}
}
当我 运行 Seat::all();
时,我得到 {}
的 category_id
作为回应。
响应示例:
{
"id": 95,
"seat_name": "gtest",
"seat_url": "http://ooop.com",
"logo_src": null,
"category_id": {},
},
看起来你的 getCategoryIdAttribute()
是 return 关系,当你想要它到 return 集合时,请务必这样调用 get()
:
public function getCategoryIdAttribute()
{
return $this->hasMany(AdSeatCategories::class)->get();
}
或者,也许您想要一个关系和一个属性:
public function categories()
{
return $this->hasMany(AdSeatCategories::class);
}
public function getCategoryIdsAttribute()
{
return $this->categories()->get()->pluck('id');
}
您应该将关系与预先加载的属性分开。
class Seat extends Model
{
public $appends = ['category_id'];
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'seat_name',
'seat_url',
'logo_src',
];
public function getCategoryIdAttribute()
{
return $this->categories()->pluck('id');
}
public function categories()
{
return $this->hasMany(AdSeatCategories::class);
}
}
使用关系 categories
的更好解决方案是调用模型 Seat
。
class Seat extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'seat_name',
'seat_url',
'logo_src',
];
public function categories()
{
return $this->hasMany(AdSeatCategories::class);
}
}
在控制器中执行:
$seats = Seat::with('categories:id')->get();