public function setTankGunLine($gunString) { $fullname_list = explode(';', $gunString); foreach ($fullname_list as $fullname) { $attributes = Gun::parseFullName($fullname); if (Gun::find()->where(['gun_caliber' => $attributes[0], 'gun_name' => $attributes[1]])->exists()) { //echo 'нашли!'; $guns[] = Gun::findOne(['gun_caliber' => $attributes[0], 'gun_name' => $attributes[1]]); } else { //echo 'НЕ нашли - надо создать'; $gun = new Gun(); $gun->gun_caliber = $attributes[0]; $gun->gun_name = $attributes[1]; $gun->save(); $guns[] = $gun; } $this->setTankGuns($guns); } }
public function search($params) { $query = Tank::find(); $dataProvider = new ActiveDataProvider(['query' => $query, 'sort' => ['attributes' => ['tank_name', 'tankArmor' => ['asc' => ['tank_armor_lob' => SORT_ASC, 'tank_armor_side' => SORT_ASC, 'tank_armor_rear' => SORT_ASC], 'desc' => ['tank_armor_lob' => SORT_DESC, 'tank_armor_side' => SORT_DESC, 'tank_armor_rear' => SORT_DESC]], 'tankGunLine' => ['asc' => ['gun.gun_caliber' => SORT_ASC, 'gun.gun_name' => SORT_ASC], 'desc' => ['gun.gun_caliber' => SORT_DESC, 'gun.gun_name' => SORT_DESC]]]]]); $this->load($params); if (!$this->validate()) { return $dataProvider; } //зависимости $query->joinWith('tankGuns'); //фильтр имени танка $query->andFilterWhere(['like', 'tank_name', $this->tank_name . '%', false]); //филтр блони $armor_array = Tank::parseTankArmor($this->tankArmor); $query->andFilterWhere(['like', 'tank_armor_lob', $armor_array[0] . '%', false])->andFilterWhere(['like', 'tank_armor_side', $armor_array[1] . '%', false])->andFilterWhere(['like', 'tank_armor_rear', $armor_array[2] . '%', false]); //фильтр орудий $gun_array = Gun::ParseFullName($this->tankGunLine); $query->andFilterWhere(['like', 'gun.gun_caliber', $gun_array[0] . '%', false])->andFilterWhere(['like', 'gun.gun_name', $gun_array[1] . '%', false]); $query->all(); return $dataProvider; }