从州laravel加载城市

时间:2014-11-14 02:51:48

标签: laravel load states city

我正在使用laravel,现在,我正在创建一个用户注册表单,我正在关联州及其城市,因此,我需要根据用户选择的状态更改选择字段值。

我有一些表格:

{{Form :: select('city',$ city,array('id','city')}}

如果我以常规方式使用{{Form :: select}}字段,它会从一个州收取所有城市的费用,因此,当用户选择州时,它必须更改选择字段中的城市列表。 / p>

我搜索了但是我找不到任何东西。我怎么能这样做?

感谢。

3 个答案:

答案 0 :(得分:2)

你可以在jQuery中使用ajax。

在您的视图中设置状态更改时的事件,如下所示:

$(document).on('change', '#state_id', function (e) {

        // empty the select with previous cities if we have.
        $('#cities').empty();            

        $.ajax({
                type: "POST",
                dataType: "json",
                // actions is a controller
                // cities is a method of actions controller
                url : "{{ URL::to('actions/cities') }}",
                //here we set the data for the post based in our form 
                data : $('#MyFormID').serialize(),
                success:function(data){                    
                        if(data.error === 0 ){ // all was ok                                

                        for (var i = 0; i < data.cities.length; i++) { 
                            $('#cities').append("<option value='"+data.cities[i].id+"'>"+data.cities[i].city_name+"</option>")
                        }

                        }else{
                            alert(data);
                        }
                },
                timeout:10000
        });                         
    });

动作/城市控制器

//remember, this is a post method
public function postCities(){

    // validate            
    $validator = Validator::make(Input::all(), 
        array(
            'state_id' => 'required|integer'
    ));        

    if ($validator->fails()) {
        return Response::json(array('error' => 1, 'message' => 'State is required'));
    }

    //City is your model, I assumes that you pkey is ID and the city name is city_name and your fkey is state_id
    $cities = City::where('state_id', '=', Input::get('state_id'))->get();

    return Response::json(array('error' => 0, 'cities' => $cities));

}

答案 1 :(得分:0)

public function getCities($province_id)
    {
        $cities = Cities::where('province_id', '=', $province_id)->get(['id', 'name']);
        return Response::json(array('error' => 0, 'cities' => $cities));
    }

答案 2 :(得分:0)

您可能想要检查我的软件包sample vue component附带的Laravel Cities,它正在执行您要构建的内容。

这是一个简单的软件包,允许您将世界上任何国家/地区的所有城市(由geonames.org提供)定位,并使用提供的Eloquent模型执行任何查询。它公开了一个HTTP API和一个vue组件,允许您通过一系列步骤选择任何城市。

您可以像在任何其他输入字段中一样将其插入表单中:

<form action="post-url" method="POST">
    <geo-select></geo-select>
    <!-- Add more form fields here... -->
    <input type="submit">
</form>

使用提供的Eloquent模型您可以执行以下查询:

// Get the States of USA in aplhabetic order
Geo::getCountry('US')
  ->children()
  ->orderBy('name')
->get();

很抱歉,还没有演示,但您可以查看github page上的一些情景......