我如何拥有此命令:
SELECT * FROM table USE INDEX (index1)
答案 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>