Вы должны преобразовать ваши данные в правильный формат, здесь вы можете увидеть правильный формат данных:
var data = [
{
id: 2,
text: '£8, Per hour'
},
{
id: 3,
text: '£10, Per hour'
}
];
Вы можете передать массив в правильном формате для просмотра, что-то вроде:
$salaries = \App\Models\Salary::all(); // eloquent collection
$salaries = $salaries->map(function ($salary) {
return ['id' => $salary->id, 'text' => $salary->text];
})->toArray();
Это даст результат примерно так:
array:1 [▼
0 => array:2 [▼
"id" => 2
"text" => "£8, Per hour"
]
0 => array:2 [▼
"id" => 3
"text" => "£10, Per hour"
]
]
Или вы можете преобразовать массив в javascript, документация по Select2 объясняет здесь как вы можете преобразовать свои данные:
Select2 требует, чтобы свойство id использовалось для уникальной идентификации параметров, отображаемых в списке результатов. Если вы используете свойство, отличное от id (например, pk), для уникальной идентификации опции, вам необходимо сопоставить старое свойство с id, прежде чем передавать его в Select2.
Если вы не можете сделать это на своем сервере или выв ситуации, когда API нельзя изменить, вы можете сделать это в JavaScript, прежде чем передать его в Select2:
var data = $.map(yourArrayData, function (obj) {
obj.id = obj.id || obj.pk; // replace pk with your identifier
return obj;
});
В вашем случае это будет примерно так:
$(document).on("change", ".js-selector", function() {
var options = {!! json_encode($salaries) !!};
var data = $.map(options, function (value, key) {
return {id: key, text: value};
});
$("#salary_list").empty().select2({
data: data
});
})