php - Yii:默认范围应用两次来连接查询

标签 php sql orm yii

我有两个模型:

class Tag extends CActiveRecord {
    //// ......

    public function defaultScope(){ 
        return array(
            'condition' => 'class_name = :class_name',
            'params' => array(':class_name' => get_class($this))
       );
    }

    public function relations(){
        return array(
            'videos' => array(self::MANY_MANY, 'Video', 'tags_videos(tag_id, video_id)')
        );
    }

    //// ......
}

class Video extends CActiveRecord {
    //// .......

    public function relations(){
        return array(
            'tags' => array(self::MANY_MANY, 'Tag', 'tags_videos(video_id, tag_id)')
        );
    }

    //// .......
}

当我执行 $video_instance->tags 时,我收到此错误:

 exception 'CDbException' with message 'CDbCommand failed to execute the SQL statement: SQLSTATE[HY093]: Invalid parameter number. The SQL statement executed was: SELECT `tags`.`id` AS `t1_c0`, `tags`.`name` AS `t1_c1`, `tags`.`orig_name` AS `t1_c2`, `tags`.`slug` AS `t1_c3`, `tags`.`flags` AS `t1_c4`, `tags`.`class_name` AS `t1_c5`, `tags`.`created_at` AS `t1_c6` FROM `tags` `tags`  INNER JOIN `tags_videos` `tags_tags` ON (`tags_tags`.`video_id`=:ypl0) AND (`tags`.`id`=`tags_tags`.`tag_id`) AND (class_name = :class_name) WHERE (class_name = :class_name)' in /srv/http/yii-1.1.12.b600af/framework/db/CDbCommand.php:528

我的问题是:为什么我的默认范围被应用两次来查询(在 WHERE 和 ON 中)以及如何解决这个问题?

Yii版本:1.1.12.b600af PHP:5.4.8

最佳答案

在关系中定义'scopes'=>array('resetScope')

public function relations(){
        return array(
            'tags' => array(self::MANY_MANY, 'Tag', 'tags_videos(video_id, tag_id)','scopes'=>array( 'resetScope' ))
        );
}

最近出现了一个错误,我不确定您的版本是否已修复: https://github.com/yiisoft/yii/issues/1197

更多引用资料: http://www.yiiframework.com/forum/index.php/topic/12025-relation-without-default-scope/

关于php - Yii:默认范围应用两次来连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13031366/

相关文章:

c# - mysql和mssql之间来回发送数据

mysql - 如何统计特定类型的多条记录

php - 在 PL/pgSQL 中检索 INSERT 的返回行

c++ - 使用 ODB ORM 执行存储过程

python - 如何在 SQL 数据库中表示层次结构

php - 在页面中的特定时间后插入数据

php - Symfony,getters 和 setters 与魔术方法

php - Eloquent mass 插入,重复键更新

sql - 一种编写检查约束的更好方法,用于检查一个值是否不为空

java - 保持多对多关系时出现 PropertyAccessException