Я работаю над проектом Laravel с несколькими моделями. Моя основная модель Product имеет несколько взаимосвязей со многими вторичными моделями в приложении. Я создал необходимые методы для настройки отношений на соответствующих моделях, дело в том, что теперь мне нужен чистый способ добавить или удалить связанные вторичные модели. Определив мой продукт как:
class Product extends Model
{
public function equipments()
{
return $this->belongsToMany('App\Equipment', 'product_has_equipment');
}
public function rawmaterials()
{
return $this->belongsToMany('App\RawMaterial', 'product_has_raw_material')->withPivot('composition');
}
public function indirectcosts()
{
return $this->belongsToMany('App\IndirectCost', 'product_has_indirect_cost');
}
public function presentations()
{
return $this->belongsToMany('App\Presentation', 'product_has_presentation');
}
}
Я попытался сделать следующее:
public function addRelated(string $type, array $items)
{
$this->__call($type, [])->attach($items);
}
Я думаю, что таким образом можно было бы просто указать строку, соответствующую одному из имен отношений и с помощью __call он может вызываться динамически, поэтому, если я передам 'equipments' в виде $ type для вышеуказанной функции, я надеялся, что внутренний вызов будет:
$this->equipments()->attach($items);
Но вместо этого Я получил ошибку
Это кажется странным, учитывая, что "неопределенный метод" точно такой же, как тот, который рекомендован laravel в том же page.
Примите во внимание, что я действительно знаю, что этот подход может быть небезопасным с точки зрения кода, но этот проект будет API, работающим на локальном сервере, который будет использоваться только электронным приложением, поэтому безопасность не мой приоритет в этом деле.