【问题标题】:Yii counter query in findallfindall 中的 Yii 计数器查询
【发布时间】:2012-11-01 19:07:15
【问题描述】:

我有以下查询

UserLogin::model()
-> with(array(
    'Provider'=> array(
        'select'=>'name'
    )
))
-> findAll(array(
    'select' => 'count(t.id) as count ',
    'group'=>'provider_id',
    'order'=>'provider_id'
));

我的观点是

<?php foreach($providerCounts as $providerCount): ?>
    <tr>
        <td><?php echo $providerCount['Provider']['name']; ?></td>
        <td><?php echo $providerCount['count']; ?></td>             
    </tr>
<?php endforeach; ?>

这是关系

'Provider'=>array(self::BELONGS_TO, 'Provider', 'provider_id'),

我收到了错误

未定义属性“UserLogin.counts”。

不同模型中的相同查询正在运行。

现在我有两个问题

  • 为什么查询不起作用
  • 如何在 yii 中调试此类错误

【问题讨论】:

    标签: php yii


    【解决方案1】:

    您需要拥有 UserLogin.count 属性,这样当您在 AR 请求中使用 as 时,Yii 可以将返回的 DB 值分配给模型。

    【讨论】:

    • 如果您的请求中有 count(...) as blaBlaBla,我的意思是在您的 UserLogic 模型中添加一个“blaBlaBla”公共属性。
    • 为什么要添加 publoc 属性
    【解决方案2】:

    您需要指定公共属性计数

    class UserLogin extends CActiveRecord
    {
        public $count = 0;
    
        public function rules() {
            // ...
            array('count', 'safe'),
            // ...
        }
    }
    

    对于调试使用 xdebug for php + ext for FireFox 用于调试 php

    也可以使用yii-debug-toolbar(在yii ext站点中搜索)

    【讨论】:

    • 为什么要添加公共属性
    • 因为表中不存在该列
    • 但同样的事情在另一个表中也可以使用,而无需提及
    • @WebDeveloper,仔细检查 - 也许它使用替换或存在同名的列
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    相关资源
    最近更新 更多