Laravel-4 как заполнить поле выбора из базы данных с идентификатором и значением имени
Я хочу заполнить поле выбора clients
из моей базы данных в контроллере проектов, поскольку проект будет принадлежать client
, но он также принадлежит зарегистрированному пользователю.
Я хочу создать поле выбора, как показано ниже:
<select>
<option value="$client->client_id">$client->client_name</option>
<option value="$client->client_id">$client->client_name</option>
</select>
У меня есть это в laravel, который заполняет мое поле выбора именами клиентов, однако атрибут value
имеет имя клиента, и я предпочел бы, чтобы у этого был client_id.
То, как я это сделал, выглядит следующим образом:
ProjectController.php
public function create()
{
//find logged in users clients
$clients = Auth::user()->clients;
$client_selector = array();
foreach($clients as $client) {
$client_selector[$client->client_name] = $client->client_name;
}
// load the create form (app/views/projects/create.blade.php)
return View::make('projects.create', array('client_selector' => $client_selector));
}
create.blade.php
{{ Form::open(array('action' => '[email protected]', 'id' => 'createproject')) }}
<div class="form-group">
@if(count($client_selector)>0)
{{ Form::label('select_client', 'Select Client', array('class' => 'awesome')); }}
<!-- SELECT IS CREATED HERE -->
{{Form::select('client', $client_selector, array_values($client_selector)[0])}}
@endif
</div>
<div class="form-group">
{{ Form::label('project_name', 'Project Name') }}
{{ Form::text('project_name', Input::old('project_name'), array('class' => 'form-control')) }}
</div>
Как вы можете видеть из того, как создается выбор, он использует имя client_name для заполнения атрибутов значений, и я не очень разбираюсь в эксперте по Laravel, поэтому я не уверен, как изменить эти атрибуты.
Если бы кто-нибудь мог показать мне, как это делается или есть лучший способ достижения этого, пожалуйста, дайте мне несколько примеров!
Спасибо заранее.
Ответы
Ответ 1
Найден способ сделать это
ClientController.php
public function create() {
// queries the clients db table, orders by client_name and lists client_name and id
$client_optons = DB::table('clients')->orderBy('client_name', 'asc')->lists('client_name','id');
return View::make('projects.create', array('client_options' => $client_options));
}
create.blade.php
// this form is now populated with the value as id and the option names as the client_name
{{ Form::select('clients', $client_options , Input::old('clients')) }}
Надеюсь, что это поможет другим, у кого есть такие проблемы.
Ответ 2
Я тоже подумал об этом и придумал следующее:
В моей модели:
public function scopeSelect($query, $title = 'Select') {
$selectVals[''] = $title;
$selectVals += $this->lists('name', 'id');
return $selectVals;
}
Тогда я могу просто поместить это в свои представления:
{{ Form::select('select_id', Model::Select('Blank option'), '', array()) }}
Ответ 3
Здесь вы можете использовать метод списков. В своем клиентском контроллере выполните
$clients = Client::lists('name', 'id');
И в виду, просто используйте переменную типа,
{{Form::select('client', $clients)}}