2014-09-04 4 views
0

Привет, я пытаюсь реализовать заполнитель по умолчанию в динамическом выборе, который привязан к другому выбору. Я использую репозиторий для запроса db для извлечения usersclients, который загружается в первый выбор. Второй выбор - это цельный выбор, который имеет местозаполнитель, который легко реализовать. Во всяком случае, я пробовал следующее, но он загружает неправильные идентификаторы в атрибуте 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? Может ли кто-нибудь помочь мне разобраться в этом, или, возможно, указать другой способ вставить значение по умолчанию?

ответ

1

Вы должны сделать:

$client_options = [0=>'Select a client from the list'] + $client_options; 

Вместо слияния.