Laravel, я не могу получать сообщения во вложенных категориях - PullRequest
0 голосов
/ 18 апреля 2020

Я использую laravel 7, я не могу получать сообщения во вложенных категориях. У меня есть структура:

        Schema::create('blog_categories', function (Blueprint $table) {
            $table->id();

            $table->bigInteger('parent_id')->unsigned()->default(1);
            $table->string('alias')->unique();
            $table->string('title');
            $table->string('description')->nullable();

            $table->timestamps();
            $table->softDeletes();
        });

        Schema::create('blog_posts', function (Blueprint $table) {
            $table->id();

            $table->bigInteger('category_id')->unsigned();
            $table->bigInteger('user_id')->unsigned();

            $table->string('post_img')->nullable()->default('none');

            $table->string('alias')->unique();
            $table->string('title');
            $table->text('fragment')->nullable();
            $table->text('content_html');
            $table->string('seo_title')->nullable();
            $table->string('seo_description')->nullable();

            $table->boolean('is_published')->default(false);
            $table->timestamp('published_at')->nullable();

            $table->timestamps();
            $table->softDeletes();

            $table->foreign('user_id')->references('id')->on('users');
            $table->foreign('category_id')->references('id')->on('blog_categories');
            $table->index('is_published');
        });

В модельных отношениях в BlogPost:

    public function post()
    {
        return $this->hasMany(BlogPost::class, 'category_id', 'id')
            ->where('is_published', 1)
            ->with(['category',])
            ->orderBy('published_at', 'DESC');
    }

И маршрут:

    Route::get('category/{alias}', 'BlogPostController@getPostsByCategory')->name('user.blog.getPostsByCategory');

В контроллере:

    public function getPostsByCategory($alias)
    {
        $category = $this->blogCategoryRepository->getCategory($alias);
        $posts = $category->post()->paginate(30);
        return view('blog.blog-category-query', compact( 'posts', 'category'));
    }

Я пытался получить вложенные категории в основной категории. Чтобы обойти вложенные категории в al oop и выполнить слияние, при слиянии я получаю только записи.

    public function getPostsByCategory($alias)
    {
        $category = $this->blogCategoryRepository->getCategory($alias);
        $posts = $category->post()->paginate(30);

        if($category->childs) {
            foreach ($category->childs as $childCategory) {
                $categoryChild = $this->blogCategoryRepository->getCategory($childCategory->alias);
                $categoryChildPost = $categoryChild->post()->paginate(1);
                $posts = $posts->merge($categoryChildPost);
            }
        }
        $childsPosts = $childCategory->post()->paginate(30);

        return view('blog.blog-category-query', compact( 'posts', 'category'));
    }

Я не могу понять, как получить все записи в основной категории и подкатегории! Спасибо за любую помощь.

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