• Изменено

Всем добрый день! Подскажите пожалуйста, как посчитать элементы в коллекции.

Есть две модели:

1. Bank

и

2. Comment

public $belongsTo = ['bank' => 'Bankeer\Banks\Models\Bank'];

Компонентом вывожу список банков:

public function onRun()
    {
        $bank = Bank::paginate($this->property('banks'));
        $comments = Comment::get();

        $this->page['banks'] = $bank;
        $this->page['comments'] = $comments;
    }

В $comments получаю все комментарии.

На странице вывожу:

{% for bank in banks %}
     {{ bank.title }}
     {% for comment in comments if comment.bank_id == bank.id %}
           {{ comment.title }}
     {% endfor %}
{% endfor %}

Всё вроде работает, но:

  1. Никак не могу посчитать количество комментариев у конкретного банка (пытался через comments | length)
  2. Можно как-то всё сделать в компоненте? (Убрать условие if comment.bank_id == bank.id на странице.)
  • reazzon ответили на это сообщение.
  • mfksky

    Создайте у банка связь с комментариями через hasMany

    public $hasMany = [
        'comments' => 'Bankeer\Banks\Models\Comment'
    ]

    И в шаблоне сможете сделать следующее:

    public function onRun()
    {
        $bank = Bank::paginate($this->property('banks'));
        $this->page['banks'] = $bank;
    }
    {% for bank in banks %}
         {{ bank.title }}
         {{ bank.comments().count() }}
    
         {% for comment in bank.comments %}
               {{ comment.title }}
         {% endfor %}
    {% endfor %}
    • Изменено
    • Решеновыбран: mfksky

    mfksky

    Создайте у банка связь с комментариями через hasMany

    public $hasMany = [
        'comments' => 'Bankeer\Banks\Models\Comment'
    ]

    И в шаблоне сможете сделать следующее:

    public function onRun()
    {
        $bank = Bank::paginate($this->property('banks'));
        $this->page['banks'] = $bank;
    }
    {% for bank in banks %}
         {{ bank.title }}
         {{ bank.comments().count() }}
    
         {% for comment in bank.comments %}
               {{ comment.title }}
         {% endfor %}
    {% endfor %}
    • mfksky ответили на это сообщение.

      reazzon Большое спасибо!