Laravel список всех идентификаторов родителей пользователя - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь получить массив всех родительских идентификаторов пользователя, использующего Eloquent относится к отношениям вот отношения

public function parent()
{
    return $this->belongsTo('App\User', 'user_id');
}

и вот этот метод даст мне идентификаторы

public function listParents()
{
    $user = $this;
    $parents = [] ;
    while ($user->parent) {
        $user = $user->parent;
        $parents[] = $user->id;
    };
    return array_reverse($parents);
}

но в клинке, когда я рендерим

{{ $user->listParents() }}

У меня бесконечный цикл

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Проблема в том, что $user->parent всегда возвращает true, даже если оно пустое.

Вы можете использовать https://secure.php.net/manual/en/function.empty.php, чтобы проверить, содержит ли он больше данных

0 голосов
/ 08 мая 2018

Спасибо всем за ответы, я нашел ошибку, у пользователей таблицы базы данных ни у одного из родителей не было user_id = 0, поэтому я получал бесконечный цикл Извини за это вот мой последний метод, который отлично работает (надеюсь, он может кому-то помочь)

<?php

namespace App;

class User extends Model 
{


    /**
    * the parent of a user
    * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
    */
    public function parent()
    {
         return $this->belongsTo('App\User', 'user_id');
    }


    /**
    * list parents ids 
    * @return array
    */
    public function listParents()
    {
        $user = $this;
        $parents = collect([]) ;

        while ($user->parent) {
            $user = $user->parent;
            $parents->push($user);
        };

        return array_reverse($parents->pluck('id')->toArray());
    }
}
0 голосов
/ 08 мая 2018

Вы перезаписываете переменную $user в цикле while:

while ($user->parent) {
    $user = $user->parent; //  no bueno
    $parents[] = $user->id;
};

Вы бы лучше обслужили, используя локальную область видимости для запроса родителей:

public function scopeParents($query)
{
    return $query->where('user_id', $this->getKey());
}

$user->parents()->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...