select()


Общий вид запроса

all(): массив строк, каждая из которых это массив пар ключ-значение.
one(): первая строка запроса.
column(): первый столбец результата.
scalar(): скалярное значение первого столбца первой строки результата.
exists(): значение указывающее, что выборка содержит результат.
count(): результат COUNT запроса.


$rows = (new \yii\db\Query())
    ->select(['id', 'email'])
    ->from('user')
    ->where(['last_name' => 'Smith'])
    ->limit(10)
    ->all();

// SELECT `id`, `email` FROM `user`
$rows = (new \yii\db\Query())
    ->select(['id', 'email'])
    ->from('user')
    ->all();

// SELECT * FROM `user` WHERE `username` LIKE `%test%`
$row = (new \yii\db\Query())
    ->from('user')
    ->where(['like', 'username', 'test'])
    ->one();

Показ самого SQL запроса:

$command = (new \yii\db\Query())
    ->select(['id', 'email'])
    ->from('user')
    ->where(['last_name' => 'Smith'])
    ->limit(10)
    ->createCommand();

// показать SQL запрос
echo $command->sql;
// показать привязываемые параметры
print_r($command->params);

SELECT

$query->select(['id', 'email']);

// эквивалентно:
$query->select('id, email');

$query->select(['user.id AS user_id', 'email']);

// эквивалентно:
$query->select('user.id AS user_id, email');

Можно сразу вернуть массив с ключами "user_id"

$query->select(['user_id' => 'user.id', 'email']);

Можно использовать выражения и sql-функции:

$query->select(["CONCAT(first_name, ' ', last_name) AS full_name", 'email']);

Можно делать подзапросы (!):

$subQuery = (new Query())->select('COUNT(*)')->from('user');

// SELECT `id`, (SELECT COUNT(*) FROM `user`) AS `count` FROM `post`
$query = (new Query())->select(['id', 'count' => $subQuery])->from('post');

Для добавления новых полей можно использовать метод addSelect()

$query->select(['id', 'username'])
    ->addSelect(['email']);