处理非对象

时间:2016-03-22 10:46:01

标签: laravel laravel-5

我可能有像这样的控制器功能

public function index()
{
    $poll = DB::table('poll')->whereNull('deleted_at')->orderBy('id', 'desc')->first();
    $question = DB::table('poll_question')->whereNull('deleted_at')->where('poll_id', $poll->id)->first();
    $answers = DB::table('poll_answer')->whereNull('deleted_at')->where('question_id', $question->id)->orderBy('id')->get();

    return view('index', compact('poll', 'question', 'answers'));
}

如果我获得的三个集合包含数据,那么这很好。如果他们不这样,我试图访问索引页面,我明白了 PollResponseController.php第20行中的ErrorException:尝试获取非对象的属性

那么处理非对象的最佳方法是什么?为了绕过这个,我可以做到

public function index()
{
    $poll = DB::table('poll')->whereNull('deleted_at')->orderBy('id', 'desc')->first();
    if($poll) {
        $question = DB::table('poll_question')->whereNull('deleted_at')->where('poll_id', $poll->id)->first();
        if($question) {
            $answers = DB::table('poll_answer')->whereNull('deleted_at')->where('question_id', $question->id)->orderBy('id')->get();
            return view('index', compact('poll', 'question', 'answers'));
        }
    }

    return view('error');
}

但这有点过分吗?我只是想知道是否有更好的方法来处理这个问题?

由于

1 个答案:

答案 0 :(得分:1)

您可以使用简单的if($question)子句或if(is_null($question))

$question = DB::table('poll_question')->whereNull('deleted_at')->where('poll_id', $poll->id)->first();
if($question){
    // The object is not empty, so I'll use it
}else{
    // The object is empty
}

在刀片模板中,它分别看起来像@if($question)@if(is_null($question))

@if($question)
    {{ $question->property }}
@endif

在大多数情况下,您应该绕过模板中的所有变量,然后使用@if子句检查每个变量。