Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#2 Laravel 6/7/8/9/10 » Вывод количества записей в категории » 10.09.2020 22:01:45

CodingBear
Ответов: 2

Добрый день. Пытаюсь освоить ООП в php и Laravel в частности. Взял в инете бесплатный шаблон и потихоньку пытаюсь запрограммировать всё. Прошу помочь и может дадите какие советы между делом.

Вопрос:
По шаблону у меня выводятся категории и в скобочках количество постов в этих категориях.
Вот так:
Категории
   Web дизайн (20)
   Лендинг (20)
   Технологии (20)
   Бизнес (20)
Как мне получить количество постов в каждой категории используя Eloquent?

У меня есть таблицы:
categories с столбцами id, title, alias
blogs с столбцами id, title, alias, category_id

category_id таблицы blogs естественно ссылается на id таблицы categories.

В моделях Blog и Category я сделал связь один ко многим

Blog.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Blog extends Model
{
    public function category()
    {
        return $this->belongsTo('App\Category', );
    }
}

Category.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    public function Blog()
    {
        return $this->hasMany('App\Blog', 'category_id');
    }
}

В контроллере я получаю список категорий вот так:

<?php

namespace App\Http\Controllers;

use App\Repositories\CategoriesRepository;
use App\Repositories\MenusRepository;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;

class BlogController extends Controller
{
    protected $category_rep;

    public function __construct(MenusRepository $menu_rep, CategoriesRepository $category_rep)
    {
        parent::__construct($menu_rep);
        $this->category_rep = $category_rep;
    }

    public function index()
    {
        $categories = $this->category_rep->get(); // метод get у меня переназначен в файле Repository.php, он будет ниже

CategoriesRepository.php

<?php

namespace App\Repositories;

use App\Category;

class CategoriesRepository extends Repository {

    public function __construct(Category $category) {
        $this->model = $category;
    }

}

Repository.php

<?php


namespace App\Repositories;

use Illuminate\Support\Str;

abstract class Repository
{

    protected $model = FALSE;

    public function get(){
        $builder = $this->model->select('*');
        return $builder->get();
        // в этом методе ещё много разных проверок, но чтобы не нагружать лишней инфой я их убрал
    }

Возможно написал много лишней информации, если так не принято прошу прощения:)

Подвал раздела