есть форма (приведу её часть):
Код: Выделить всё
<div class="row">
<div class="col-lg-4 col-md-4">
<?= $form->field($search, 'diameter',[
'options' => ['class' => 'form-group']])
->dropDownList($search->getListDiameter(),[
'prompt' => 'Любой',
'id' => 'diameter'
])
->label('Диаметр');
?>
</div>
<div class="col-lg-1 col-md-1">
......
</div>
<div class="col-lg-7 col-md-7 pull-left">
......
</div>
</div>
<div class="row">
<div class="col-lg-4 col-md-4">
<?= $form->field($search, 'width',[
'options' => ['class' => 'form-group']])
->dropDownList($search->getListWidth(),[
'prompt' => 'Любая',
'id' => 'width'
])
->label('Ширина');
?>
</div>
<div class="col-lg-1 col-md-1 pull-left">
......
</div>
<div class="col-lg-2 col-md-2 pull-left">
......
</div>
</div>
<div class="row">
<div class="col-lg-4 col-md-4">
<?= $form->field($search, 'dia',[
'options' => ['class' => 'form-group']])
->dropDownList($search->getListDia(),[
'prompt' => 'Любая',
'id' => 'dia'
])
->label('Диаметр ступицы (DIA)');
?>
</div>
<div class="col-lg-1 col-md-1 pull-left">
......
</div>
<div class="col-lg-2 col-md-2 pull-left">
......
</div>
</div>
Код: Выделить всё
function loadDiameter() {
var diameter = $('#diameter');
var width = $('#width');
var dia = $('#dia');
var diameterV = diameter.val();
$.getJSON('/disc/load-diameter', {
diameter:diameter.val(),
width:width.val(),
dia:dia.val(),
},
function(data){
diameter.html('');
diameter.append('<option value="">Любой</option>');
$.each(data, function(i){
if(parseFloat(this.key) === parseFloat(diameterV)){
diameter.append('<option value="' + this.key + '" selected>' + this.value + '</option>');
}
else{
diameter.append('<option value="' + this.key + '">' + this.value + '</option>');
}
});
diameter.prop('disabled', false);
diameter.trigger('refresh');
});
}
function loadWidth() {
var diameter = $('#diameter');
var width = $('#width');
var dia = $('#dia');
var widthV = width.val();
$.getJSON('/disc/load-width', {
diameter:diameter.val(),
width:width.val(),
dia:dia.val()
},
function(data){
width.html('');
width.append('<option value="">Любая</option>');
$.each(data, function(i){
if(parseFloat(this.key) === parseFloat(widthV)){
width.append('<option value="' + this.key + '" selected>' + this.value + '</option>');
}
else{
width.append('<option value="' + this.key + '">' + this.value + '</option>');
}
});
width.prop('disabled', false);
width.trigger('refresh');
});
}
function loadDia() {
var diameter = $('#diameter');
var width = $('#width');
var dia = $('#dia');
var diaV = dia.val();
$.getJSON('/disc/load-dia', {
diameter:diameter.val(),
width:width.val(),
pcd:pcd.val(),
dia:dia.val()
},
function(data){
dia.html('');
dia.append('<option value="">Любая</option>');
$.each(data, function(i){
if(parseFloat(this.key) === parseFloat(diaV)){
dia.append('<option value="' + this.key + '" selected>' + this.value + '</option>');
}
else{
dia.append('<option value="' + this.key + '">' + this.value + '</option>');
}
});
dia.prop('disabled', false);
dia.trigger('refresh');
});
}
$('#diameter').change(function() {
loadWidth();
loadDia();
});
$('#width').change(function() {
loadDiameter();
loadDia();
});
$('#dia').change(function() {
loadDiameter();
loadWidth();
});
Код: Выделить всё
public function actionLoadDiameter()
{
$search = new ModelDisc(Yii::$app->request->get());
$search->setListDiameter($search->generalCfg());
$result = [];
foreach ($search->getListDiameter() as $k => $v){
$result[] = ['key' => $k,'value' => $v];
}
return Json::encode($result);
}
public function actionLoadWidth()
{
$search = new ModelDisc(Yii::$app->request->get());
$search->setListWidth($search->generalCfg());
$result = [];
foreach ($search->getListWidth() as $k => $v){
$result[] = ['key' => $k,'value' => $v];
}
return Json::encode($result);
}
public function actionLoadDia()
{
$search = new ModelDisc(Yii::$app->request->get());
$search->setListDia($search->generalCfg());
$result = [];
foreach ($search->getListDia() as $k => $v){
$result[] = ['key' => $k,'value' => $v];
}
return Json::encode($result);
}
Код: Выделить всё
public function setListDia($cfg,$sort = SORT_DESC)
{
unset($cfg['dia']);
$models = ProductDisk::find()
->select('dia')
->distinct()
->where($cfg)
->orderBy(['dia' => $sort])
->all();
$result = [];
foreach ($models as $model) {
if ($model->dia !== null && $model->dia !== '') {
$result[(string)$model->dia] = $model->dia;
}
}
$this->_listDia = $result;
}
вот запросы которые происходят:
Код: Выделить всё
SELECT DISTINCT `diameter` FROM `tbl_product_disk` WHERE (`width`=9) AND (`pcd`=135) AND (`dia`=106.3) ORDER BY `diameter` DESC
Код: Выделить всё
SELECT DISTINCT `width` FROM `tbl_product_disk` WHERE (`diameter`=20) AND (`pcd`=135) AND (`dia`=106.3) ORDER BY `width` DESC