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、效果:
