拉拉维尔列出所有用户父母的ID



我正在尝试使用Eloquent Belong To 关系获取用户的所有父ID的数组 这是关系

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

这是让我获得ID的方法

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

但是当我渲染时在刀片上

{{ $user->listParents() }}

我正在无休止的循环

谢谢大家的回答,我发现了错误,在数据库表用户中,没有一个父母有 user_id = 0 ,这就是为什么我得到无限循环的原因 对此感到抱歉 这是我的最后一个工作正常的方法(希望它可以帮助某人)

<?php
namespace App;
class User extends Model 
{

/**
* the parent of a user
* @return IlluminateDatabaseEloquentRelationsBelongsTo
*/
public function parent()
{
return $this->belongsTo('AppUser', '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());
}
}

你正在覆盖 while 循环中的$user变量:

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->parent总是返回 true,即使它是空的。

您可以使用 https://secure.php.net/manual/en/function.empty.php 来检查它是否包含更多数据

最新更新