如何使用 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
我正在做一个测验。下面是一个方法,我正在尝试获取一个可以在 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