Laravel Получить количество всех дочерних узлов с условием

Я использую Laravel5.1 в своем приложении. В этом у меня есть одно имя таблицы пользователей и схема пользовательской таблицы, как показано ниже.

id          Name         Parane_id     Node
1           ABC          0             
2           XYZ          1              L
3           DFS          1              R
4           GJK          2              L
5           DSG          3              L
6           FAF          4              R
7           KES          2              R  

Я хочу подсчитать всех пользователей с левой стороны от пользователя 1 (т.е. 2,4,6,7), поэтому количество равно 4.

так же, как если бы я хотел правую часть 2, тогда он вернет 7, поэтому количество равно 1.

как это возможно с помощью Laravel Eloquent.

Любая помощь очень ценится.


person Gaurang Ghinaiya    schedule 19.08.2015    source источник
comment
Что вы подразумеваете под всеми пользователями слева от пользователя 1?   -  person jedrzej.kurylo    schedule 19.08.2015
comment
Можете ли вы дать более подробное объяснение о левой и правой стороне?   -  person mdamia    schedule 19.08.2015
comment
@mdamia Точно так же, как у каждого человека есть две ноги, одна левая, а другая правая, поэтому, если у меня будет ребенок, я добавлю их как левую или правую. Таким образом, в основном у каждого родителя есть максимум два ребенка, а у ребенка есть подчиненный ребенок и так далее. поэтому в моем примере вы можете видеть, что у пользователя ABC есть два дочерних элемента 2,3, в которых XYZ — левая сторона (узел: L означает левый, а R — правый), а DFS — правая сторона. Надеюсь, вы получите его или позвольте мне, если нет.   -  person Gaurang Ghinaiya    schedule 20.08.2015
comment
Для большего понимания просто проверьте изображение imgur.com/01JRusx.   -  person Gaurang Ghinaiya    schedule 20.08.2015


Ответы (1)


Вы хотите подсчитать узлы своего дерева при определенном условии, которое в данном случае является левым дочерним элементом узла.

Определите дочерние элементы для вашего User. Затем создайте функцию для обхода вашего дочернего дерева и выполнения подсчета.

class User extends Model {

    public function children()
    {
        return $this->hasMany('App\User', 'parent_id');
    }

    public function countChildren($node = null)
    {
        $query = $this->children();
        if (!empty($node))
        {
            $query = $query->where('node', $node);
        }

        $count = 0;
        foreach ($query->get() as $child)
        {
            $count += $child->countChildren() + 1; // Plus 1 to count the direct child
        }
        return $count;
    }

}

Чтобы подсчитать оставшихся детей пользователя с идентификатором 1.

$user = User::find(1);
$count = $user->countChildren('L');
person PaePae    schedule 09.09.2015
comment
есть ли лучший способ подсчитать ребенка в laravel? - person saber tabatabaee yazdi; 28.06.2020