如果找不到变量,如何使变量为空?

时间:2019-05-01 17:18:43

标签: laravel eloquent

我有课程,并有针对课程的测试。我正在寻找特定的测试,该测试存在于某些课程中,而某些课程没有。

  • 我的问题是,如果找不到数据,如何将变量测试设为空数组?
$test = Test::where('level', 'medium')->where('lesson_id', $lesson->id)->firstOrFail();

我的意思是,如果上述项目中的代码不存在,我将如何将其分配为空数组,则出现错误原因,在某些情况下,它找不到数据,我试图将代码放入try and catch中,但是没有帮助我!

4 个答案:

答案 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