yii2
配置讀寫自動讀寫分離時,在一些場景下可能須要強制讀主庫。以及 createCommand
的 in
查詢參數綁定實現方法。php
yii2
配置讀寫自動主從分離時,在一些場景下可能須要強制讀主庫。這時咱們可使用 \yii\db\Connection
的 useMaster
方法來操做,該方法會將 enableSlaves
模式在本次查詢會話中關閉,查詢完成後繼而恢復。sql
/** @var $users User[] */ $users = User::getDb()->useMaster(function($db) use ($ids) { /** @var $db \yii\db\Connection */ return $db->createCommand("SELECT * FROM " . User::tableName() . " where find_in_set(`id`, :ids) AND `is_del`=:is_del", [ ':ids' => implode(',', $ids), ':is_del' => Base::NOT_DELETED, ])->queryAll(\PDO::FETCH_OBJ); });
createCommand
構建 sql
時可能會遇到 IN
查詢的場景,yii2
貌似不支持 IN
的參數綁定,可使用 find_in_set
來代替。固然,你也能夠直接拼接 sql
而不使用 參數綁定
。yii2
$db->createCommand("SELECT * FROM `users` WHERE `id` in(:ids)", [':ids' => [1, 2, 3]]); $db->createCommand("SELECT * FROM `users` WHERE `id` in(:ids)", [':ids' => implode(",", [1, 2, 3])]);
會被解析成yii
SELECT * FROM `users` WHERE `id` in(1); SELECT * FROM `users` WHERE `id` in('1,2,3');//看到 '1,2,3' 果斷換 find_in_set
可行用法code
$db->createCommand("SELECT * FROM `users` WHERE find_in_set(`id`, :ids)", [':ids' => implode(",", [1, 2, 3])]);