#laravel #laravel-livewire
Вопрос:
У меня есть простой компонент livewire, который инициализируется с помощью запрошенных данных из SQL. Ниже приведен код
public $states=[];
public function mount()
{
$this->states = DB::select("select id,name from hr_states");
}
в представлении:
<select class="mt-1">
<option>...select...</option>
@foreach($states as $state)
<option value="{{$state->id}}" wire:key="{{$state->id}}">{{$state->name}}</option>
@endforeach
</select>
при первом рендеринге он работает хорошо, но при любом обновлении страницы (при других событиях) выдает ошибку Attempt to read property "id" on array
, указывающую на эту строку <option value="{{$state->id}}" wire:key="{{$state->id}}">{{$state->name}}
Поэтому я попытался визуализировать как массив {{$state['id']}}
, но это приводит к ошибке Cannot use object of type stdClass as array
Комментарии:
1. приведите его к массиву с
->toArray()
помощью и используйте его как массив все время2. это не позволяет приковать
->toArray()
кDB::select()
метаниюCall to a member function toArray() on array
. Таким образом, проблема в том, что он говоритgettype($this->states)
, что естьarray
, но не позволяет отображать с помощью{{$state['id']}}
Ответ №1:
class StateComponent extends Component
{
public function render()
{
$states = DB::table("select * from states")->get();
return view('livewire.state-component', ['$states'=>$states]) ;
}
}
в представлении:
<select class="mt-1">
<option>...select...</option>
@foreach($states as $state)
<option value="{{$state->id}}" wire:key="{{$state->id}}">
{{$state->name}}</option>
@endforeach
</select>