Я пытаюсь получить массив всех идентификаторов родителей пользователя, использующего отношение 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() }}
я получаю бесконечный цикл
спасибо за ответ, я попробовал while ($ user-> parent! = null), но результат тот же!
Я имею в виду, что вы запрашиваете все у родителей пользователей и продолжаете спрашивать их всех, а не одного за другим, пока все они не станут пустыми.
нет, я прошу всех родителей только одного пользователя $ user-> listParents ()






Вы перезаписываете переменную $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();
Спасибо за ответ, да, я перезаписываю $ user, чтобы получить родительский элемент родительского элемента до последнего родительского элемента с user_id = 0, я пробовал ваш код, но он не работает, он возвращается только для пользователя, и этот пользователь даже не находится в родителях !
Проблема в том, что $user->parent всегда возвращает true, даже если он пуст.
Вы можете использовать https://secure.php.net/manual/en/function.empty.php, чтобы проверить, содержит ли он больше данных
спасибо за ответ, я попробовал while ($ user-> parent! = null), но результат тот же!
а пока (! empty ($ user-> parent)) тот же бесконечный цикл!
Спасибо всем за ответы, я обнаружил ошибку, у пользователей таблицы базы данных ни у одного из родителей нет 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());
}
}
попробуйте цикл
foreach, вашwhile ($user->parent)всегда будет правдой.