Абстрактный пример, необходимо связать класс M и N связью один к одному. В классе M пишем: $this->hasOne('N', ['столбец_из_таблицы_N' => 'столбец_из_таблицы_M']); В классе N пишем: $this->hasOne('M', ['столбец_из_таблицы_M' => 'столбец_из_таблицы_N']);
// возвращает набор строк. каждая строка - это ассоциативный массив с именами столбцов и значений. // если выборка ничего не вернёт, то будет получен пустой массив. $posts = Yii::$app->db->createCommand('SELECT * FROM post') ->queryAll();
// вернёт одну строку (первую строку) // false, если ничего не будет выбрано $post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=1') ->queryOne();
// вернёт один столбец (первый столбец) // пустой массив, при отсутствии результата $titles = Yii::$app->db->createCommand('SELECT title FROM post') ->queryColumn();
// вернёт скалярное значение // или false, при отсутствии результата $count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM post') ->queryScalar();
// ----- привязки параметров ----- $post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status') ->bindValue(':id', $_GET['id']) ->bindValue(':status', 1) ->queryOne();
$post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status') ->bindValues($params) ->queryOne();
$post = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=:id AND status=:status', $params) ->queryOne();
// ----- экранирование имён таблиц и столбцов ----- // Для написания независимого от БД кода необходимо использовать следующий синтаксис экранирования используемый в Yii: // [[column name]]: заключайте имя столбца в двойные квадратные скобки; // {{table name}}: заключайте имя таблицы в двойные фигурные скобки. $count = Yii::$app->db->createCommand("SELECT COUNT([[id]]) FROM {{employee}}") ->queryScalar();
$clientModel->toArray() - конвертируем из объекта в массив результат выборки из БД
При написании независимого от базы данных кода, правильно экранировать имена таблиц и столбцов довольно трудно, так как в разных базах данных правила экранирования разные. Чтоб преодолеть данную проблему вы можете использовать следующий синтаксис экранирования используемый в Yii:
[ [column name] ]: заключайте имя столбца в двойные квадратные скобки; { {table name} }: заключайте имя таблицы в двойные фигурные скобки.