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

How to check data in Array by using eloquent method in Laravel

我正在做一个测验。下面是一个方法,我正在尝试获取一个可以在 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'));
  }

下面是 blade 代码,我在其中使用 in_array 函数传递 question_check 变量:

                  @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)

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

使用 first() 将 return 模型而不是 collection,因此您无法循环。使用 get() 获取结果作为 collection.

即:而不是这个

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

这样做

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

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

考虑到这一点,

My Target is to make a check if question already attempted then print something.

我想这才是你真正想做的。

在控制器中

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

在Blade

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