Laravel列出所有用户父母的ID

时间:2018-05-08 08:28:03

标签: php laravel

我正在尝试使用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() }}

我正在获得无限循环

3 个答案:

答案 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());
    }
}