Я использую 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'));
}
Я не могу понять, как получить все записи в основной категории и подкатегории! Спасибо за любую помощь.