我正在编写一个递归函数,以从父记录中调用子记录。似乎没有用。我收到此错误; “试图获取非对象的属性'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
答案 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;
}
我将在稍后解释,首先根据您的要求进行修改并运行