我在laravel中的递归函数不会自行调用

时间:2019-05-17 08:16:51

标签: laravel controller laravel-blade

我正在编写一个递归函数,以从父记录中调用子记录。似乎没有用。我收到此错误; “试图获取非对象的属性'refid'”。我在哪里弄错了。有什么想法吗?下面是代码段。

//功能控制器

public function DisplayDetail($id)
{
    $displayDetail = DB::table('tblmembers')
        ->where('refid',$id)
        ->get();
    return $this->DisplayDetail($displayDetail->refid);
}

//调用该函数的主控制器

public function dashboard()
{ 

    $profile = DB::table('tblmembers')->where('username',$userid)->first();
    $data['userdetail'] = $this->DisplayDetail($profile->memid); 
    return view('main.userArea',$data);  
}

//显示获取记录的刀片服务器

@foreach($userdetail as $userd)
    {{ $userd->memid }}
@endforeach

我的样本数据

refid   |   memid
-------------------
12345   |  123456
123456  |  1234567
123456  |  1234568
123456  |  1234569
1234567 |  1234570
上表中的

; refid:123456带来了中值:1234567,1234568,1234569。然后refid:1234567带来了memid:12345670

我要以memid 123456的用户身份登录后显示所有memid

3 个答案:

答案 0 :(得分:0)

您在函数DisplayDetail中做错一件事。这是您功能中的更正

如果要获取单个物品,则这里是正确的代码。

public function displayDetail($id)
{
    $displayDetail = DB::table('tblmembers')
                       ->where('refid',$id)
                       ->first();
    if($displayDetail) {
         $displayDetail['userdetail'] = $this->displayDetail($displayDetail->refid);
    }
    return $displayDetail;
}

仪表板功能如下所示:

public function dashboard()
{ 
    $profile=DB::table('tblmembers')->where('username',$userid)->first();
    $userDetail = $this->DisplayDetail($profile->memid); 
    return view('main.userArea',[
        'userdetail' => $userDetail
    ]);
}

这是正确的代码。试试这个,让我知道您是否还有其他疑问。

答案 1 :(得分:0)

错误:

  

试图获取非对象的属性“ refid”

出现

的原因是您的数据库查询使用的是->get(),该查询返回的是Collection,而不是对象。您无法在集合上获取属性->refid,只能从集合中的对象获取它。

如Lakhwinder Singh在其代码中所示,您需要使用->first(),因为这将返回一个对象。我建议您使用->firstOrFail(),那样您将获得一个与您的ID匹配的对象,或者如果找不到它,它将失败。

如果您这样做:

$displayDetail = DB::table('tblmembers')
        ->where('refid',$id)
        ->firstOrFail();

您现在可以拨打电话:

$displayDetail->refid

您可以在对displayDetail的函数调用中使用它。

答案 2 :(得分:0)

尝试此功能

    public function DisplayDetail($id,$data=[])
    {

     $displayDetail = DB::table('tblmembers')
            ->where('refid',$id)
            ->get();
    if($displayDetail && isset($displayDetail->refid))// your condition for last child 
    {   
     $data = $this->DisplayDetail($displayDetail->refid,$data);
    }
     $data[] = array('refid' =>$displayDetail->id ,
                     'memid' => $displayDetail->secondid );
    return $data;
    }

我将在稍后解释,首先根据您的要求进行修改并运行