Php Laravel哪里有问题,可能是分页?

Php Laravel哪里有问题,可能是分页?,php,laravel,Php,Laravel,我在这里遇到了一个问题,在前10个结果中有些东西可以正常工作,但是当我单击第二个分页时,或者如果我执行排序以显示有问题的记录,就会导致问题。它基本上是一个where请求,用于在同一个表上显示另一条记录,并与其他记录一起工作 我已经创建了不同的记录,如果它们出现在前10个结果中,它们工作正常,但是当我将它们更改为在分页中断后出现时,我得到了相同的错误。否则,如果字段为null,则可以正常工作 它给我的错误是,它显示为非对象,但该代码与选择相同对象的所有其他类似记录一起工作 错误 ErrorExce

我在这里遇到了一个问题,在前10个结果中有些东西可以正常工作,但是当我单击第二个分页时,或者如果我执行排序以显示有问题的记录,就会导致问题。它基本上是一个where请求,用于在同一个表上显示另一条记录,并与其他记录一起工作

我已经创建了不同的记录,如果它们出现在前10个结果中,它们工作正常,但是当我将它们更改为在分页中断后出现时,我得到了相同的错误。否则,如果字段为null,则可以正常工作

它给我的错误是,它显示为非对象,但该代码与选择相同对象的所有其他类似记录一起工作

错误

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>