【问题标题】:cakephp force index at model模型中的 cakephp 力指数
【发布时间】:2013-04-11 13:12:24
【问题描述】:

我使用在模型中使用“FORCE INDEX”的查找方法。模型很好,但是当我对该 find 方法进行测试时,发生了 SQL 错误。 我使用测试/夹具并定义数据库模式和数据。在测试/夹具中,我不知道如何定义索引。因此,用于测试的数据库没有索引。 如果您能告诉我如何在测试/夹具中定义索引,那就太好了。

在模型中...

$this->Model->find('all', array(
     'fields' => array('foo'),
     'conditions' => array('foo' => foo),
     'joins' => array('FORCE INDEX(foo)'),
);

在测试/夹具中

var $fields = array(
    'id' => ....
    'foo' => ....
    'created' => ....
    'modified' => ....
 );

【问题讨论】:

    标签: php cakephp indexing cakephp-1.3


    【解决方案1】:

    我认为这会帮助你:

    http://cakephp.1045679.n5.nabble.com/Using-USE-INDEX-or-FORCE-INDEX-in-Model-gt-find-amp-relationships-td3281552.html#a3300205

    "1- 创建我自己的数据源 - (在我的例子中扩展 DboMysql) 数据源有两个任务:

    它会覆盖 read 方法并检查模型是否设置了 useIndex 字段

        if (!empty($model->useIndex)) { 
                $this->useIndex = $model->useIndex; 
        } 
    
        return parent::read($model, $queryData); 
    

    它会覆盖 renderStatement 方法,如果设置了 $model->useIndex 字段,则在 select 语句中的表别名之后添加其值。

    if (strtolower($type) == 'select' && !empty($this->useIndex)) { 
            $res = "SELECT {$fields} FROM {$table} {$alias} {$this->useIndex} {$joins} {$conditions} {$group} {$order} {$limit}"; 
    } else { 
            $res = parent::renderStatement($type, $data); 
    } 
    $this->useIndex = null; 
    return $res; 
    

    2-设置模型字段whitch包含使用索引,强制索引或忽略索引的sql部分

    例如在控制器中:

    $this->Task->useIndex = 'IGNORE INDEX(ind_usr_id)'; 
    $this->paginate = array( 
            'fields' => array('Task.id', 'Task.name','User.id', 'User.name'), 
            'order' => 'Task.id', 
            'limit' => 10 
    ); 
    $this->paginate('Task'); 
    

    "

    【讨论】:

    • 感谢您的回答。我在 test.php 中添加“$this->Model->query('ALTER TABLE tbl ADD INDEX index(foo);');”。它工作正常!谢谢!
    • @user2270371 如果此答案适合您,请“接受”它以将您的问题标记为“已回答”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    相关资源
    最近更新 更多