我有课程,并有针对课程的测试。我正在寻找特定的测试,该测试存在于某些课程中,而某些课程没有。
$test = Test::where('level', 'medium')->where('lesson_id', $lesson->id)->firstOrFail();
我的意思是,如果上述项目中的代码不存在,我将如何将其分配为空数组,则出现错误原因,在某些情况下,它找不到数据,我试图将代码放入try and catch中,但是没有帮助我!
答案 0 :(得分:3)
firstOrFail
应该抛出异常,因此在try catch中应该可以解决它,另一种方法是:
$test = Test::where('level', 'medium')->where('lesson_id', $lesson->id)->first() ?? [];
??
运算符意味着,如果第一部分的结果为null
,它将返回空数组。
答案 1 :(得分:1)
firstOrFail()
函数返回第一个找到的项目,但是如果该项目不存在,则会抛出异常ModelNotFoundException
。我不知道为什么要在此处放置空数组,但这是针对您的情况的解决方案:
$test = Test::where('level', 'medium')
->where('lesson_id', $lesson->id)
->first(); // this returns null if item doesn't exist
$test = $test ?? []; // this turns null to empty array
更好的解决方案是从查询结果中提取null
并检查是否。示例:
$test = Test::where('level', 'medium')
->where('lesson_id', $lesson->id)
->first();
if (!$test) {
// do this, if item doesn't exist
}
或类似的话:
try {
$test = Test::where('level', 'medium')
->where('lesson_id', $lesson->id)
->firstOrFail();
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
// do this, if item doesn't exist
}
答案 2 :(得分:0)
要从数据库或空数组(集合)中获取数据(如果没有匹配的数据),可以在查询生成器上使用get()
函数。
$test = Test::where('level', 'medium')
->where('lesson_id', $lesson->id)
->get();
答案 3 :(得分:0)
您可以使用exist()或nottExist()来检查记录是否存在。
scipy.cluster.hierarchy.linkage