天天看點

在laravel中使用ajax實作二級關聯

1、html頁面:

<div class="form-group">
     <label for="rule">過期規則:</label>
     <select name="rule" id="rule" class="form-control" style="width:20%; margin-right: 40px;">
        <option value="0" rule_id="0">請選擇規則</option>
        @foreach($rules as $rule)
             <option value="{{ $rule->value }}" rule_id="{{ $rule->id }}">{{ $rule->name }}</option>
        @endforeach
     </select>

     <label for="time">過期倍數:</label>
     <select name="time" id="time" class="form-control" style="width:20%;">
         <option value="0">請選擇倍數</option>
     </select>
     <span id="auto"></span>
</div>
           

過期規則是在頁面加載時,便已經從資料表中取出來放進去了:

$projects = Project::all();
$rules = Rule::all();
return view('key.create', compact('projects', 'rules'));
           

2、ajax代碼:

$("#rule").change(function() {
            $.post("{{ url('key/createTime') }}/"+$(this).find("option:selected").attr("rule_id"), {
                "_token": "{{ csrf_token() }}"
            }, function(data) {
                $("#time").html("<option value='0' name='time'>請選擇倍數</option>");
                if(data.value == 0) {  // 當選擇請選擇規則時,不會向下執行
                    return false;
                }
                $.each(data, function(i, time) {
                    $("#time").append("<option value='" + time.value + "'>" + time.value + "</option>");
                });
                $("#time").append("<option id='auto_time'>自定義</option>");
            });
        });
           

當過期規則改變時,将id傳到createTime()方法中

3、createTime()方法:

public function createTime($rule_id)
      {   // 當選中的為請選擇規則時,自己拼一個資料,當success時,判斷
          if ($rule_id == 0) {
              return ['id'=>0, 'value'=>0, 'rule_id'=>0];
          }
          $times = Rule::find($rule_id)->time;
          return $times;
      }
           

對$times的處理:rule和time表是一對多的關系:

public function time()
    {
        return $this->hasMany(\App\Model\Time::class, 'rule_id', 'id');
    }
           

4、效果:

在laravel中使用ajax實作二級關聯
在laravel中使用ajax實作二級關聯

繼續閱讀