我可能有像这样的控制器功能
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');
}
但这有点过分吗?我只是想知道是否有更好的方法来处理这个问题?
由于
答案 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
子句检查每个变量。