Устаревшие объекты при использовании полиморфных отношений «многие ко многим» в Laravel 5.2

Я написал класс под названием Categorizable что позволяет полиморфные отношения многие ко многим между классом, который расширяет его и классом Category, Это прекрасно работает, но я заметил, что если я вызываю метод для добавления категории к категорируемому объекту, он добавляет запись в таблицу соединений, но мой фактический объект не обновляется. Если я попытаюсь позвонить categories на моем объекте, он не обновляется с тем, что находится в базе данных. Я хотел бы поддерживать свои объекты в актуальном состоянии, поэтому мне не нужно запрашивать базу данных каждый раз, когда я добавляю категорию.

Categorizable.php

class Categorizable extends Model{

public function categories(){
return $this->morphToMany(Category::class, 'categorizable');
}

public function addCategory(\App\Category $category){
if ( $this->isValidCategory($category) ){
if ( $this->hasCategory($category) ){
return false;
}
else{
$this->categories()->save($category);
return true;
}
}
else{
return false;
}
}

public function removeCategory(\App\Category $category){
if ( $this->isValidCategory($category) ) {
if ($this->hasCategory($category)) {
$this->categories()->detach($category);
return true;
}
else {
return false;
}
}
else{
return false;
}
}

public function hasCategory(\App\Category $category){
return $this->categories->contains($category);
}

public function isValidCategory(\App\Category $category){
if ( $category->category_type === get_class( $this ) ){
return true;
}
else{
return false;
}
}

Если это невозможно с Laravel 5.2 или считается плохой практикой, скажите, пожалуйста. Если у вас есть какие-либо рекомендации о том, как я могу улучшить это, это тоже приветствуется. Благодарю.

0

Решение

Рассмотрите возможность обработки этого в контроллере, как описано в https://laravel.com/docs/5.4/eloquent-relationships#updating-many-to-many-relationships

Это упростит то, что вы хотите достичь. Давайте предположим, что категории связаны со статьей, а контроллером является ArticleController. $ article — это объект модели, и проверка isValidCategory () выполнена. Добавить категорию или удалить одну становится:

$article->categories()->attach($category->id);
$article->categories()->detach($category->id);

Сброс всех отношений этой статьи:

$article->categories()->detach();
$article->categories()->attach($categories); //flat array

Или сделать это в одной строке:

$article->categories()->sync($categories);

Помните, что вы можете использовать один идентификатор или массив из идентификаторов, как [1, 2, 3]

Замечания: $category->id это предположение, если $ category это идентификатор, то, очевидно, использовать $category

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]