为啥我不能在 Laravel 上正确映射嵌套查询? “在 null 上调用成员函数 map()”显示为错误
Posted
技术标签:
【中文标题】为啥我不能在 Laravel 上正确映射嵌套查询? “在 null 上调用成员函数 map()”显示为错误【英文标题】:Why can't I properly map nested query on Laravel? "Call to a member function map() on null" shown as error为什么我不能在 Laravel 上正确映射嵌套查询? “在 null 上调用成员函数 map()”显示为错误 【发布时间】:2020-03-28 20:26:29 【问题描述】:地图功能后确实无法获得所需的数据。我希望通过关系从 save_details 中获得信用、日期以及从 Saving_bills 中获得的 save_bill_number,但现在看起来我陷入了这个致命的问题。调用地图上的成员函数显示致命错误。我们将不胜感激。
这是关系:
public function savingBill()
return $this->belongsTo(SavingBill::class);
这是我的控制器逻辑:
$savingDetails = SavingDetail::where('date', $request->date)
->with('savingBill')
->get()
->map(function ($savingDetail)
return [
'credit' => $savingDetail->credit,
'date' => $savingDetail->date,
'saving_bill' => $savingDetail
->saving_bill
->map(function ($inner)
return [
'saving_bill_number' => $inner->saving_bill_number
];
) // If I put an semicolon here, IDK why error would be shown, hope nothing with the semicolon
];
);
This is the error that I'm getting.Please check the image for the error.
I need to filter above mentioned data from here.
【问题讨论】:
请通过编辑将所有错误消息以及您的调试尝试添加到问题中 您可能在 db 中有一条记录,根据错误图像,它的关系为空。您可以尝试将try catch
块代码放入 map 以了解它在哪里失败以及是什么情况。
先生,我目前在 db 中只有 3 个条目,两个表之间没有任何空条目。但我已将 save_bill_id 设置为 db 中的可为空值。这会是个问题吗?以及我如何尝试在地图中使用 Try Catch,但它给出了无法访问的语句作为错误。
【参考方案1】:
我不确定这些map()
中的哪一个实际上会引发错误,但我猜这是第二个遍历saving_bill
关系的错误。
您在 cmets 中说 saving_bill_id
可以为空。如果是这种情况,则关系也将为 null,并且没有 Collection 提供 map()
方法。
在假设这个变量总是被填充之前检查 null:
$savingDetails = SavingDetail::where('date', $request->date)
->with('savingBill')
->get()
->map(function ($savingDetail)
return [
'credit' => $savingDetail->credit,
'date' => $savingDetail->date,
'saving_bill' => $savingDetail->saving_bill
? $savingDetail
->saving_bill
->map(function ($inner)
return [
'saving_bill_number' => $inner->saving_bill_number
];
)
: null,
];
);
【讨论】:
以上是关于为啥我不能在 Laravel 上正确映射嵌套查询? “在 null 上调用成员函数 map()”显示为错误的主要内容,如果未能解决你的问题,请参考以下文章