Мой уровень знаний Yii2 - нулевой. Только начал изучать. Сразу прошу прощения за, возможно, глупые вопросы.
Имеем структуру из трех связанных таблиц Федеральный округ->Регион->Город:
Имеется объект ActiveRecord на базе таблицы City:
Код: Выделить всё
class City extends \yii\db\ActiveRecord
{
public $region_name;
public $fdistrict_id;
public $fdistrict_name;
...
/**
* @return \yii\db\ActiveQuery
*/
public function getRegion()
{
return $this->hasOne(Region::className(), ['id' => 'region_id']);
}
public function getFdistrict()
{
return $this->hasOne(Fdistrict::className(), ['id' => 'fdistrict_id'])->via('region');
}
}
1. Хочу допилить стандартный CRUD, чтобы можно было при добавлении города фильтровать регионы по федеральному округу.
views/city/_form.php:
Код: Выделить всё
...
<?= $form->field($model, 'fdistrict_id')->dropDownList(
ArrayHelper::map(
Fdistrict::find()->select(['name', 'id'])->orderBy('name')->all(),
'id',
'name'),
['class' => 'form-control inline-block'])
?>
...
Код: Выделить всё
protected function findModel($id)
{
if (($model = City::findOne($id)) !== null) {
$model->fdistrict_id = $model->fdistrict->id; // <---- here the trick
return $model;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
2. Если заменить
на<?= $form->field($model, 'fdistrict_id')->dropDownList(
, то все работает исправно без ручного указания<?= $form->field($model, 'fdistrict')->dropDownList(
. И я не понимаю, как он находит нужный член класса (элемент массива в данном случае).$model->fdistrict_id = $model->fdistrict->id;
3. Сформировал следующий запрос для провайдера:
Код: Выделить всё
$query = City::find()
->select(['city.*', 'fdistrict.id AS fdistrict_id', 'region.name AS region_name', 'fdistrict.name AS fdistrict_name'])
->leftJoin('region', 'region.id = city.region_id')
->leftJoin('fdistrict', 'fdistrict.id = region.fdistrict_id')
->with(['region', 'fdistrict']);
4. После того, как разберусь с моделью City, приступлю к освоению динамичных форм на ajax (фильтр регионов при смене федерального округа). Даже не представляю как это делается в Yii2, буду рад ссылке на хороший мануал. Сэкономите мне пару часов жизни )