Прежде всего кажется, что у вас есть 1-X отношение, которое вы ошибочно используете как многие к одному. Ваш belongsTo
должен быть hasOne
, поскольку ваши элементы имеют одну категорию, а не наоборот.
Вы можете использовать свойство $appends
, чтобы добавить настраиваемое поле и заставить его вести себя так, как если бы оно было частью ваша модель:
Переименуйте ваши отношения и добавьте мутатор и аксессор:
public function categoryRelationship()
{
return $this->hasOne(Categories::class);
}
public function getCategoryAttribute() {
return $this->categoryRelationship->name;
}
public function setCategoryAttribute($value) {
$this->categoryRelationship->name = $value;
}
Вы также можете добавить событие, чтобы автоматически сохранять ваши отношения при сохранении модели, чтобы гарантировать ее работает прозрачно:
protected static function booted()
{
static::saving(function ($myModel) {
$myModel->categoryRelationship->save();
});
}
}
Наконец, вы добавляете свойство $appends
, чтобы убедиться, что ваш новый атрибут всегда включен в модель, как если бы он был собственным.
protected $appends = [ 'category' ];
// This is so you don't end up also showing the relationship
protected $hidden = [ 'categoryRelationship' ];