我正在尝试使用Eloquent属于To关系获取用户的所有父亲ID的数组 这是关系
public function parent()
{
return $this->belongsTo('App\User', 'user_id');
}
这里的方法应该是我的ids
public function listParents()
{
$user = $this;
$parents = [] ;
while ($user->parent) {
$user = $user->parent;
$parents[] = $user->id;
};
return array_reverse($parents);
}
但是在我渲染时的刀片
{{ $user->listParents() }}
我正在获得无限循环
答案 0 :(得分:1)
您正在覆盖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();
答案 1 :(得分:0)
问题是$user->parent
总是返回true,即使它是空的。
您可以使用https://secure.php.net/manual/en/function.empty.php检查其是否包含更多数据
答案 2 :(得分:0)
感谢大家的答案,我发现错误,在数据库表用户中,没有父母有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());
}
}