如何在Yii2 ActiveQuery中选择索引

时间:2015-12-08 10:34:03

标签: sql yii2

我如何拥有此命令:

SELECT * FROM table USE INDEX (index1)

5 个答案:

答案 0 :(得分:0)

您可以使用findBySql

$sql = "SELECT * FROM table USE INDEX (index1);" 

$model = Table::findBySql($sql)->all();   

本案例中的表格表示您的ActiveRecord类名称

使用findBySql函数就足以编写所需的sql查询,包括任何连接,where子句等等。 findBySql实际上被移动为分配给var '$sql' sql数据库引擎,用于运行。如果你想使用activeQuery,就像你在评论中添加的那样,它将逐步构建你需要的等效sql命令。在某些情况下,使用主动查询比使用特别针对那些非常熟悉sql和查询没有DAO且没有ORM的数据库的SQL查询更不自然

答案 1 :(得分:0)

试试这个:

$model = User::find()
    ->indexBy('id')
    ->one();

答案 2 :(得分:0)

您可以使用Yii2 createcommand方法执行任何普通的SQL查询,如下所示:

use yii\db\Query;
$connection = \Yii::$app->db;

$model = $connection->createCommand('SELECT * FROM table USE INDEX (index1)');
$users = $model->queryAll();

答案 3 :(得分:0)

您应该在表格的名称后面添加USE INDEX。对于yii queryBuilder,你可以这样做:

 Model::find()
 ->from(['tableAlias' => Model::tableName().' use index (index1)'])
 ->with(...)
 ->where(...) 
 //etc

答案 4 :(得分:0)

对于 MySQL,我不得不使用这个:

Product::find()
            ->select('product.*')
            ->from([new Expression('{{%product}} FORCE INDEX (idx__product_search)')])

如果不指定 ->select,它不会创建正确的查询,因为它会在名为 `product FORCE INDEX(idx__product_search)` 的表中搜索<​​/p>