Php Laravel哪里有问题,可能是分页?
我在这里遇到了一个问题,在前10个结果中有些东西可以正常工作,但是当我单击第二个分页时,或者如果我执行排序以显示有问题的记录,就会导致问题。它基本上是一个where请求,用于在同一个表上显示另一条记录,并与其他记录一起工作 我已经创建了不同的记录,如果它们出现在前10个结果中,它们工作正常,但是当我将它们更改为在分页中断后出现时,我得到了相同的错误。否则,如果字段为null,则可以正常工作 它给我的错误是,它显示为非对象,但该代码与选择相同对象的所有其他类似记录一起工作 错误Php Laravel哪里有问题,可能是分页?,php,laravel,Php,Laravel,我在这里遇到了一个问题,在前10个结果中有些东西可以正常工作,但是当我单击第二个分页时,或者如果我执行排序以显示有问题的记录,就会导致问题。它基本上是一个where请求,用于在同一个表上显示另一条记录,并与其他记录一起工作 我已经创建了不同的记录,如果它们出现在前10个结果中,它们工作正常,但是当我将它们更改为在分页中断后出现时,我得到了相同的错误。否则,如果字段为null,则可以正常工作 它给我的错误是,它显示为非对象,但该代码与选择相同对象的所有其他类似记录一起工作 错误 ErrorExce
ErrorException (E_ERROR)
Trying to get property 'full_name' of non-object (View: resources/views/doctors/index.blade.php)
<td><?php echo e($doctors->where('id', $doctor->ffs_id)->first()->full_name); ?></td>
// Searches, sorts, and filters
$approved = $request->approved;
$search = $request->search;
$sortColumn = ($request->sortColumn == null ? 'last_name' : $request->sortColumn);
$sortDirection = ($request->sortDirection == null ? 'asc' : $request->sortDirection);
$doctors = Doctor::
when($search, function ($query) use ($search) {
$query->where(function ($query) use ($search) {
$query
->where('first_name', 'LIKE', '%' . $search . '%')
->orWhere('last_name', 'LIKE', '%' . $search . '%')
->orWhere('type', 'LIKE', '%' . $search . '%')
->orWhere('npi', 'LIKE', '%' . $search . '%')
->orWhere('license', 'LIKE', '%' . $search . '%')
->orWhere('dea', 'LIKE', '%' . $search . '%');
});
})
->when($approved, function ($query) use ($approved) {
$query->where(function ($query) use ($approved) {
$query->where('is_approved', $approved);
});
})
->orderBy($sortColumn, $sortDirection)
->paginate(10);
分页代码:控制器
ErrorException (E_ERROR)
Trying to get property 'full_name' of non-object (View: resources/views/doctors/index.blade.php)
<td><?php echo e($doctors->where('id', $doctor->ffs_id)->first()->full_name); ?></td>
// Searches, sorts, and filters
$approved = $request->approved;
$search = $request->search;
$sortColumn = ($request->sortColumn == null ? 'last_name' : $request->sortColumn);
$sortDirection = ($request->sortDirection == null ? 'asc' : $request->sortDirection);
$doctors = Doctor::
when($search, function ($query) use ($search) {
$query->where(function ($query) use ($search) {
$query
->where('first_name', 'LIKE', '%' . $search . '%')
->orWhere('last_name', 'LIKE', '%' . $search . '%')
->orWhere('type', 'LIKE', '%' . $search . '%')
->orWhere('npi', 'LIKE', '%' . $search . '%')
->orWhere('license', 'LIKE', '%' . $search . '%')
->orWhere('dea', 'LIKE', '%' . $search . '%');
});
})
->when($approved, function ($query) use ($approved) {
$query->where(function ($query) use ($approved) {
$query->where('is_approved', $approved);
});
})
->orderBy($sortColumn, $sortDirection)
->paginate(10);
编辑:即使删除所有排序功能并尝试加载/doctors?page=2
也会出现相同的错误
编辑2:我已经确认它与控制器中写入
$doctors
的方式有关。如果我创建了一个版本的Doctor::all()
,并在刀片中引用它,它将不会出错。您正在分页查询返回的$doctors
原始集合中搜索父医生记录。如果父医生不在当前记录页中,您的“查询”结果将为空
问题:你有100名医生,ID为1-100。您正在获取第一页,因此$doctors
将包含doctors#1-10。(简单示例,没有搜索或任何内容,只是标准分页。)
医生2的ffs\u id
值为39
。因为您正在$doctors
集合中搜索ID为39的医生,所以找不到该医生,因为$doctors
仅包含1-10
因此,您100%正确,问题在于$doctors
的内容
解决方案:为医生与医生之间的关系创建一个有说服力的关系方法。类似这样的内容(根据应用程序的需要进行调整):
使用此关系在结果中检索和引用父医生(此处使用此关系从视图中删除@if
检查):
{{可选($doctor->ffs)->全名}
这将直接查询数据库中的相关记录,而不是使用$doctors
集合
此时,我们将遇到一个名为的问题,其中每个父医生请求都是一个单独的数据库查询。您可以使用以下方法之一解决此问题。可能意味着
$doctor->where('id',$doctor->ffs_id)->first()返回null
;您确定有医生的id
为$Doctor->ffs\u id
的医生吗?另外,如果您已经有$doctor
,为什么需要筛选$doctors
才能找到它?理论上讲,$doctor->where('id',$doctor->ffs_id)->first()
不会返回与$doctor
中已经存在的内容相同的内容吗?你就不能只做$doctor->full\u name
?医生记录上的ffs\u id
列引用医生表上另一位医生的id
。因此,我使用$doctors->where('id',$doctor->ffs_id)->first()->full_name
来查找相关$doctor的引用ffs医生。我不知道为什么where语句会返回null,如果它在不同的页面上,或者在没有更改首页上的任何其他记录并正确显示的情况下不返回null。
public function ffs()
{
return $this->belongsTo(\App\Doctor::class);
}
<td>
{{ optional($doctor->ffs)->full_name }}
</td>