= Yii 2 Database SQL Queries = [[https://www.yiiframework.com/doc/guide/2.0/en/db-query-builder|Yii2 Query Builder]] == Debugging == $query = (new \yii\db\Query()) ->select(['e1.*]) ->from('entry e1') ->where(['e1.created_at' => null]) ->andWhere(['and', 'e1.brand=\'Acme\'']) ->orderBy(['e1.product_code' => SORT_ASC, 'e1.serial_number' => SORT_ASC]); $command = $query->createCommand(); $rows = $command->queryAll(); // get array with data $SQL = $command->sql; Yii::$app->getSession()->setFlash('debug', $SQL); // display query command // show the SQL statement and parameters echo "SQL: " . $command->sql . "\n\nParams: " . print_r($command->params, true) . "\n\nResult row count: " . count($rows); == Query Using Models == $customer_id = 12345; $customer = app\models\Customer::find()->where(['id'=>$customer_id])->one(); $prices = app\models\Price::find() ->where(['customer_id' => $customer_id]) ->orderBy(['type' => SORT_ASC, 'description' => SORT_ASC]) ->all(); == Methods for Querying == === findBySql === Sample 1: $sql = 'SELECT * FROM tbl_user'; $model = User::findBySql($sql)->all(); Sample 2: $sql = 'SELECT * FROM tbl_user'; $model = User::findBySql($sql)->one(); === queryAll === $connection = \Yii::$app->db; $model = $connection->createCommand('SELECT * FROM tbl_user'); $users = $model->queryAll(); === queryOne === $connection = \Yii::$app->db; $model = $connection->createCommand("SELECT * FROM tbl_user where userid=$id"); $users = $model->queryOne(); === queryColumn === $connection = \Yii::$app->db; $model = $connection->createCommand('SELECT username FROM tbl_user'); $users = $model->queryColumn(); === queryScalar === $connection = \Yii::$app->db; $model = $connection->createCommand('SELECT COUNT(*) FROM tbl_user'); $users_count = $model->queryScalar(); === Query With Prepared Statements() === $connection = \Yii::$app->db; $user = $connection->createCommand('SELECT * FROM tbl_user WHERE userid=:userid'); $user->bindValue(':userid', $_GET['userid']); $model = $user->query(); === Query Class === Sample 1: $query = new yii\db\Query; $query->select('userid, username') ->from('tbl_user') ->limit(10); $command = $query->createCommand(); $data = $command->queryAll(); Sample 2: $columns = []; $columns[] = 'userid'; $columns[] = 'username'; $query = new yii\db\Query; $query->select($columns) ->from('tbl_user') ->limit(10); $command = $query->createCommand(); $data = $command->queryAll(); == SQL Update == === Converting Raw SQL to Query === This complex UPDATE query cannot be code in Yii2 using the standar QueryBuilder. UPDATE `pay_audit` JOIN `invoice_items` ON `invoice_items`.`mdn` = `pay_audit`.`account_id` AND `invoice_items`.`unitprice` = `pay_audit`.`payment` AND `invoice_items`.`producttype_name` LIKE 'PAYMENT' AND DATE_FORMAT(`invoice_items`.`created`, '%Y-%m-%d') = '2015-02-21' SET `pay_audit`.`invoice_item_id` = `invoice_items`.`id` WHERE `pay_audit`.`report_date` = '2015-02-21' Use the ''createCommand()'' instead, as follows: $today = date('Y-m-d'); $sql = ""; $sql .= "UPDATE `pay_audit` "; $sql .= "JOIN `invoice_items` "; $sql .= " ON `invoice_items`.`mdn` = `pay_audit`.`account_id` "; $sql .= " AND `invoice_items`.`unitprice` = `qpay_audit`.`payment` "; $sql .= " AND `invoice_items`.`producttype_name` LIKE 'PAYMENT' "; $sql .= " AND DATE_FORMAT(`invoice_items`.`created`, '%Y-%m-%d') = '$today' "; $sql .= "SET `pay_audit`.`invoice_item_id` = `invoice_items`.`id` "; $sql .= "WHERE `pay_audit`.`report_date` = '$today'"; $command = \Yii::$app->db->createCommand($sql); $command->execute(); === Other Examples === Raw SQL: \Yii::$app->db->createCommand('update user set status = 1 where age > 30')->execute(); Raw SQL with placeholders (to prevent SQL injection) \Yii::$app->db->createCommand('update user set status = :status where age > 30')->bindValue(':status','1')->execute(); update() method // update user set status = 1 where age > 30 \Yii::$app->db->createCommand()->update('user', ['status' => 1], 'age > 30')->execute(); References: [[https://stackoverflow.com/questions/28651195/yii2-querybuilder-update-with-join]] == References == * [[http://www.yiiframework.com/doc-2.0/guide-db-query-builder.html|Yii 2 Guide: DB Query Builder]] * [[http://www.yiiframework.com/doc-2.0/guide-db-active-record.html|Yii 2 Guide: DB ActiveRecord]]