Привет, я пытаюсь реализовать заполнитель по умолчанию в динамическом выборе, который привязан к другому выбору. Я использую репозиторий для запроса db для извлечения users
clients
, который загружается в первый выбор. Второй выбор - это цельный выбор, который имеет местозаполнитель, который легко реализовать. Во всяком случае, я пробовал следующее, но он загружает неправильные идентификаторы в атрибуте value для опции select.laravel загрузка неправильного идентификатора в атрибут значения в опции выбора
Я Извлечение аутентификации пользователей клиентов, а затем то клиенты проектов, так и в моем хранилище:
public function getClients()
{
return \Auth::user()->clients()->orderBy('client_name', 'asc')->lists('client_name','id');;
}
public function getClientsProjects($clientId)
{
$client = Client::find($clientId);
if (! $client = Client::find($clientId)) { echo 'client not found'; }
//$projects = $projects = \Auth::user()->projects()->where('client_id', $client->id)->orderBy('project_name')->get(array('id','project_name'));
$projects = $projects = Project::where('client_id', $client->id)
->orderBy('project_name')
->get(array('id','project_name'));
$response = array();
foreach($projects as $project){
$response[$project->id] = $project->project_name;
}
return $response;
}
В моем контроллере задач кормлю это как так:
public function clientsProjects()
{
$clientId = Input::get('option');
return Response::json($this->project->getClientsProjects($clientId));
}
public function create()
{
$tasks = Auth::user()->tasks;
$client_options = $this->project->getClients();
$client_options = array_merge([0 => 'Select a client from the list'], $client_options);
$status = $this->project->getStatus();
$priority = DB::table('priorities')->orderBy('name', 'asc')->lists('name', 'id');
return View::make('tasks.create', array('client_options' => $client_options, 'status' => $status, 'priority' => $priority));
}
и в моем view я отделил его от основ, никаких стилей вообще и просто jquery, и вызов для перехода к моей функции контроллера и обновления прикованного выбора:
@if(count($client_options)>0)
{{ Form::select('client', $client_options, Input::old('client'), array('id' => 'select_client', 'class' => ' tempus_select')) }}
@endif
{{ Form::select('project', array_merge(array('default' => 'Select client first')), 'default', array('class' => 'tempus_select', 'id' => 'project_select')) }}
{{ HTML::script('js/jquery-2.0.3.js'); }}
<script>
$(document).ready(function($){
$('#select_client').change(function(){
$.get("/task/clientsprojects",{
option: $(this).val()
}, function(data) {
console.log(data);
var model = $('#project_select');
model.empty();
$.each(data, function(key, value) {
$('#project_select').append("<option value='"+key+"'>"+value+"</option>'");
});
$("#project_select").trigger("change");
});
});
});
</script>
Однако HTML выводит следующий:
<select id="select_client" class=" tempus_select" name="client">
<option value="0">Select a client from the list</option>
<option value="1">Client 2</option>
<option value="2">Client 1</option>
</select>
Однако в БД они имеют следующие значения
id| client_ name |
1 | Client 1 |
2 | Client 2 |
я сделал следующее в моей getClientsProjects()
функции для отладки:
\Log::info('client id = ' . $clientId);
и следующее в моей функции создания в контроллере задачи:
\Log::info($client_options);
и они вернулись правильные значения, но я знаю, что если я это array_merge
из кода:
$client_options = array_merge([0 => 'Select a client from the list'], $client_options);
Тогда значения загружаются правильно, так что я не уверен, что происходит on, почему это приведет к неправильной загрузке атрибута value? Может ли кто-нибудь помочь мне разобраться в этом, или, возможно, указать другой способ вставить значение по умолчанию?