Laravel Livewire保存到集合并在组件视图中显示



我使用Laravel Livewire从下拉列表中选择一个项目(它传递一个ID(,然后我找到ID所属的模型,我想将该模型添加到集合中。然后,每次我从下拉列表中选择一些东西时,我都想用新模型更新现有集合。

public $workoutExercises;
public function mount()
{
$this->workoutExercises = collect([]);
}
public function submitExercise()
{
$newExercise = Exercise::where('id', $this->exercise)->first();
$this->workoutExercises->push($newExercise);
return;
}

在组件视图中:

@foreach ($workoutExercises as $workoutExercise)
{{ $workoutExercise->exercise_name }}
@endforeach

当我提交一个新的练习时,它会将其添加到集合中,并按预期显示在我的视图中。然而,当我添加一个额外的练习时,我会出现这个错误"尝试读取属性";exercise_name";在阵列上";。

我不明白。这就像它添加了第一个罚款,但在后续提交时使用数组而不是集合?

TIA!

在背后,Livewire使用了像数组这样的所有东西,所以当组件第一次加载$workoutExercises时,它是一个集合,但在第一个请求之后,它变成了一个数组。我通常所做的是创建一个选定id的数组,并将数据作为计算属性进行查询。

public array $workoutExerciseIds = [];
public function submitExercise(): void
{
array_push($workoutExerciseIds, $this->exercise);
}
public function getWorkoutExecisesProperty()
{
return Exercise::query()
->whereIn('id', $this->workoutExerciseIds)
->get();
}

然后在我的前端:

@foreach ($this->workoutExercises as $workoutExercise)
{{ $workoutExercise->exercise_name }}
@endforeach

最新更新