Users::deleteAll(['user_id' => $mod->id_user]);
Model search
use yii\db\Expression; //etapy - pole typu string "1,2,5,7" $exp = new Expression("FIND_IN_SET($this->etapy,etapy)"); if ($this->etapy != null) { $query->andFilterWhere(['>',$exp,0]); }
Przykład
use yii\data\ActiveDataProvider; $dataProvider = new ActiveDataProvider([ 'query' => Pendaftar::find() ->select(['pendaftar.*','user.*']) ->from('pendaftar') ->leftJoin('user', 'user.id=pendaftar.id_user_pendaftar') ]); return $this->render('index', [ 'dataProvider' => $dataProvider, ]);
Dodawanie dodatkowej klauzuli where do dataProvider w kontrolerze
$dataProvider->query->andWhere('status = 10');
Domyślne sortowanie
$dataProvider->sort->defaultOrder = ['nr' => SORT_DESC];
Jak korzystać z relacji w modelu
Tabele , modele tabel i pola
user - model User
user_profil - model UserProfil
Poprzez pole id_profil tabele powiązane są relacyjnie
W modelu User obsługującym tabelę user znajduje się funkcja:
public function getProfil() { return $this->hasOne(UserProfil::className(), ['id' => 'id_profil']); }
Przykład użycia
$mod_user = User::find()->where(['=', 'id', $id])->one(); echo 'Imie: ' . $mod_user->profil->imie;
Metoda polega na filtrowaniu (validacji) atrybutów modelu
przed ich zapisaniem.
W modelu należy dodać funkcję:
public function beforeValidate() { foreach (array_keys($this->getAttributes()) as $attr) { if (!empty($this->$attr)) { $this->$attr = \yii\helpers\HtmlPurifier::process($this->$attr); } } return parent::beforeValidate(); }
HtmlPurifier to klasa, która usuwa z danych podejrzane fragmenty
Model dla, którego nie ma tabeli w bazie danych. Wykorzystywany do przekazywania danych za pomocą formularza
public function actionForm(){ $model = new \yii\base\DynamicModel([ 'name', 'email', 'address' ]); $model->addRule(['name','email'], 'required') ->addRule(['email'], 'email') ->addRule('address', 'string',['max'=>32]); if($model->load(Yii::$app->request->post())){ // tu można coś robić z danymi formularza model return $this->redirect(['view']); } return $this->render('form', ['model'=>$model]); }
Jak zduplikować rekord zmieniając wartości wybranych atrybutów
W akcji kontrolera:
1. Tworzymy model istniejącego rekordu
$model = $this->findModel($id);
2. Modyfikujemy wybrane atrybuty
$model->id = null; // !!! Ważne jeśli id jest PRIMARY i autoincrement $model->data_zakonczenia = null; $model->rozpoczecie = date('Y-m-d'); $model->zakonczony = 0; $model->widoczny = 0;
3. Ustawiamy parametr informujący, że należy stworzyć nowy rekord
$model->isNewRecord = true;
4.Zapisujemy model do rekordu
$model->save();
INSERT do tabeli: user_grupa_rabat danych z tabeli $insert_arr
foreach ($mod_rabat as $row) { $insert_arr[] = [ 'id_user' => $row->id_user, 'id_grupa_towarowa' => $row->id_grupa_towarowa, 'rabat' => $row->rabat ]; } if (count($insert_arr) > 0) { $columnNameArray = ['id_user', 'id_grupa_towarowa', 'rabat']; $insertCount = Yii::$app->db->createCommand() ->batchInsert( 'user_grupa_rabat', $columnNameArray, $insert_arr ) ->execute(); }