我正在尝试使用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 来检查它是否包含更多数据