如何在Laravel中使用eloquent方法检查Array中的数据

时间:2018-03-17 12:29:49

标签: laravel laravel-5 eloquent laravel-5.2 laravel-5.3

我正在进行一项测验。下面是一个方法,我试图得到一个可以在in_array函数中运行的数组:

public function mcq($id)
  {
    $questions = Chapter::find($id)->questions()->inRandomOrder()->limit(1)->first();
    $question_check = TestsResultsAnswer::where('user_id', auth::id())->pluck('question_id')->toArray();
    $sponsors = Sponsor::All();
    return view('pages.mcq', compact('questions', 'sponsors', 'question_check'));
  }

下面是使用question_check函数传递in_array变量的刀片代码:

                  @foreach ($questions as $key => $question)
                    @if(in_array($key, $question_check))
                    {{'Question Already Attempted'}}
                    @endif
                  @endforeach

但我收到以下错误:

(2/2) ErrorException
Trying to get property of non-object (View: E:\xampp\htdocs\laravel\lea\resources\views\pages\mcq.blade.php)

我的目标是检查是否已经尝试过问题然后打印一些东西。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

使用first()将返回模型,而不是集合,因此您无法循环访问。使用get()将结果作为集合获取。

I.e:而不是这个

$questions = Chapter::find($id)->questions()->inRandomOrder()->limit(1)->first();

这样做

$questions = Chapter::find($id)->questions()->inRandomOrder()->limit(1)->get();

这应该可以解决您当前的问题。

考虑到这一点,

  

我的目标是检查是否已经尝试过问题然后打印一些东西。

我认为这是你真正想做的事。

在控制器

$questions = Chapter::find($id)->questions()->inRandomOrder()->get()

在刀片中

@foreach ($questions as $question)
  @if(in_array($question->id, $question_check))
    {{'Question Already Attempted'}}
  @endif
@endforeach