Получение отношений от детей - PullRequest
0 голосов
/ 04 марта 2020

В Eloquent у меня есть модель Category, которая позволяет мне определять некоторые категории банковских выписок для моих транзакций.

Категория может быть либо родительской, либо дочерней категорией. Все классифицированные транзакции относятся к дочерней категории:

Leisure
  - Travel
  - Flight
  - Hotel
  - Rental Car
..etc

Досуг - это родительская категория, где для свойства category_parent_id установлено значение null. Rental Car - это подкатегория с category_parent_id, для которой установлен идентификатор Leisure. Транзакции связаны с Rental Car, а не с Travel.

. Я использую отношения parent и children, чтобы найти дочерних или родительских элементов, например:

public function parent()
{
    return $this->hasOne( Category::class, 'id', 'category_parent_id' );
}

public function children()
{
    return $this->hasMany( Category::class, 'category_parent_id', 'id' );
}

Однако если я хочу суммировать все транзакции в родительской категории, как я могу решить это? Ток не работает:

public function transactions()
{
    return $this->children()->with('transactions');
}

1 Ответ

0 голосов
/ 05 марта 2020

Я хочу суммировать все транзакции в родительской категории

Если вы подразумеваете под суммированием транзакции рекурсивных загруженных потомков, то вам придется сохранить transactions метод как рекурсивная загрузка потомков и создание отдельного метода для объединения

Примерно так должно работать:

// In your model
public function getCombinedTransactions(){
  $this->load('transactions');
  $transactions = collect();
  foreach($this->transactions as $child){
    $transactions->push($child->getCombinedTransactions());
  }
  return $collection->flatten()->unique('id'); // I'm assuming you want unique by id here
}

// You can call it like this elsewhere
$parent->getCombinedTransactions();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...