Laravel 5.6 Вставка многих ко многим полиморфным отношениям не работает - PullRequest
0 голосов
/ 09 сентября 2018

Я использую laravel 5.6 в этом проекте. Значение категории не записывается в сводную таблицу «классифицируемые». Я проверяю с F12 или ошибка, но я не получаю никаких ошибок. все они в порядке, но не записанная сводная таблица. Где я была ошибка.

Структура моего блога проекта sql ниже

- блоги

идентификатор заглавие описание ...

- классифицируемые category_id categorizable_id categorizable_type

Ниже код принадлежит Category.php Модель

class Category extends Model
{
    protected $primaryKey='category_id';

    public function blogs(){
        return $this->morphedByMany('App\Blog', 'categorizable', 'categorizables', 'category_id');
    }
}

Вышеуказанный код принадлежит Blog.php

public function category($categories)
    {
        $categories = Blog::buildCatArray($categories);

        foreach ($categories as $catName) {
            $this->addOneCat($catName);
            $this->load('categories');
        }

        return $this;
    }


    public function buildCatArray($categories): array
    {
        if (is_array($categories)) {
            $array = $categories;
        } elseif ($categories instanceof BaseCollection) {
            $array = $this->buildCatArray($categories->all());
        } elseif (is_string($categories)) {
            $array = preg_split(
                '#[' . preg_quote(',;', '#') . ']#',
                $categories,
                null,
                PREG_SPLIT_NO_EMPTY
            );
        } else {

            throw new \ErrorException(
                __CLASS__ . '::' . __METHOD__ . ' expects parameter 1 to be string, array or Collection; ' .
                gettype($categories) . ' given'
            );
        }

        return array_filter(
            array_map('trim', $array)
        );
    }



    protected function addOneCat(string $catName)
    {
        $cat = Self::findOrCreate($catName);
        $catKey = $cat->getKey();

        if (!$this->cats->contains($catKey)) {
            $this->categories()->attach($catKey);
        }
    }


    public function find(string $catName)
    {
        return $this->Category::$catName->first();
    }

    public function findOrCreate(string $catName): Category
    {
        $cat = $this->find($catName);

        if (!$cat) {
            $cat = $this->Category::create(['name' => $catName]);
        }

        return $cat;
    }

Это класс хранилища файлов моего контроллера блогов

BlogController.php

public function store(Request $request)
    {
    $data = new Blog;
    $data->title = $request->title;
    $data->content = $request->content;
    $tags = explode(',',$request->tag);
    $categories = explode(',',$request->category);
    $data->save();
    $data->tag($tags);
    $data->category($categories);
}

С наилучшими пожеланиями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...