В настоящее время работает Laravel 4.1.31. В контроллере массив построен из пользователей с их идентификатором в качестве ключа:
$owners = User::get()->lists('username','id');
Распечатка массива владельцев на уровне контроллера приведет к следующему:
print_r($owners) // Array // ( // [1] => user1 // [2] => user2 // [4] => user3 <--- key jumps to 4, this is correct // [5] => user4 // [6] => user5 // )
Однако, как только массив передается в представление, ключи не сохраняются, распечатывая его на уровне представления, получается следующее:
// Array // ( // [1] => user1 // [2] => user2 // [3] => user3 <--- key was replaced with 3, this is incorrect // [4] => user4 all values from this point on are now shifted // [5] => user5 // )
В исходном массиве не было 3-х ключей, но как только он был передан в представление, все сдвинулось, чтобы заполнить пробел. Это в конечном итоге вызывает проблемы, так как все id выше 2 теперь несовместимы. Как сохранить ключи массивов?
Полный метод контроллера:
public function edit($id) { // get the task $task = $this->task->find($id); // grab all users for owner field $owners = User::get()->lists('username','id'); // grab all projects for project field $projects = Project::get()->lists('title','id'); // add placeholder to beginning of arrays array_unshift($owners, 'Select Owner'); array_unshift($projects, 'Select Project'); // return show view return View::make('tasks.edit', array( 'task' => $task, 'status' => $this->status, 'projects' => $projects, 'owners' => $owners )); }