I am on a sign-up screen where there is a combobox of State and Cities.
City must be populated after state is selected.
I have create.blade.php
<div class="form-group">
{!! Form::label('estado', 'Estado:') !!}
{!! Form::select('estado', $estados) !!}
</div>
<div class="form-group">
{!! Form::label('cidade', 'Cidade:') !!}
{!! Form::select('cidade', []) !!}
</div>
<script type="text/javascript">
$('select[name=estado]').change(function () {
var id_estado = $(this).val();
// $('select[name=cidade]').html('').append('<option value=""> Carregando... </option>');
$.get('/cidades/' + id_estado, function (cidades) {
$('select[name=cidade]').empty();
$.each(cidades, function (key, value) {
$('select[name=cidade]').append('<option value=' + value.id_cidade + '>' + value.nome + '</option>');
});
});
});
</script>
And the controller:
class CidadeController extends Controller
{
private $estadoModel;
public function __construct(Estado $estado)
{
$this->estadoModel = $estado;
}
public function index()
{
$estados = $this->estadoModel->lists('nome', 'id_estado');
return view('contas.create', compact('estados'));
}
public function getCidades($id_estado)
{
$estado = $this->estadoModel->find($id_estado);
$cidades = $estado->cidades()->getQuery()->get(['id_estado', 'nome']);
return Response::json($cidades);
}
But using the laravel debug is doing the wrong query:
select * from 'estados' where 'estados'.'id_estado' = '3' limit 1
select 'id_estado', 'nome' from 'cidades' where 'cidades'.'id_cidade' = '3' and 'cidades'.'id_cidade' is not null
Can anyone help me because you are doing the wrong query?