首页 > 解决方案 > 使用 laravel 8 连接两个表,没有 id

问题描述

我在数据库中有以下两个表:

在此处输入图像描述 在此处输入图像描述

我有以下看法:

<div class="form-row">
                    <div class="col-sm-6">
                       <label>Pays</label>
                       <select class="form-control select2-single" data-width="100%" name="pays" id="pays">
                         <option label="&nbsp;">&nbsp;</option>
                         @foreach($countries as $country)
                         <option value="{{$country->name}}">{{$country->name}}</option>
                        @endforeach
                       </select>
                   </div>

                   <div class="col-sm-6">
                       <label>Ville</label>
                       <select class="form-control select2-single" data-width="100%" name="ville" id="ville">
                       </select>
                   </div>
              </div>

我的控制器:

public function getAllStates()
    {
        $country_id = request('country');

        $states = State::where('country_id',$country_id)->get();

                
                $option = "<option value = ''> Select State</option>";


        foreach($states as $state){
            $option.= '<option value = "'.$state->name.'">'.$state->name.'</option>';
        }
        return $option;
    }

我的脚本:

<script type="text/javascript">
  
  $(document).ready(function(){
       
       $("#pays").change(function(){
           let country_id = this.value;
           $.get('/getState?country='+country_id,function(data){
              $("#ville").html(data);
           });
       });

  });

</script>

我想在第二个下拉列表中列出与一个国家相关的所有州。

所以在我的下拉国家中,我传递了一个国家名称并记下一个国家ID,我怎样才能加入这两个表来获取一个国家的所有州名,而不是国家ID?

标签: jqueryajaxlaravel

解决方案


首先,您的 HTML 需要更改,因此国家 ID 是选项元素选择的值。

@foreach($countries as $country)
  <option value="{{$country->id}}">{{$country->name}}</option>
@endforeach

然后控制器应该按预期工作并返回具有该国家/地区 ID 的州,但请记住,您应该$state->id再次用作选项元素的值。

foreach($states as $state) {
  $option .= '<option value = "'.$state->id.'">'.$state->name.'</option>';
}

推荐阅读