【问题标题】:Yii ActiveRecord and Console Commands not workingYii ActiveRecord 和控制台命令不起作用
【发布时间】:2015-01-31 08:57:26
【问题描述】:

Yii + CDbCriteria / ActiveRecord 与 Yii 控制台命令结合使用时出现问题

Yii 1.1.13 版

以下代码在从控制器调用时有效。因为 HTTP Session 是可访问的。

$criteria=new CDbCriteria;
$criteria->select='first_name';
$criteria->condition='id=:contactid';
$criteria->params=array(':contactid'=>4);
$contact=Contact::model()->find($criteria); // <-- exception occurs here... strange
echo '<pre>';
var_dump($contact->first_name);
echo '</pre>';

但是,当通过 Yii 控制台命令访问时,我收到以下错误和前 2 条跟踪行:

    exception 'CException' with message 'CConsoleApplication and its behaviors do not have a method or closure named "getSessiorks/yii/1.1.13/base/CComponent.php:265
Stack trace:
#0 /home/stm/stm_frameworks/yii/1.1.13/web/auth/CWebUser.php(193): CComponent->__call('getSession', Array)
#1 /home/stm/stm_frameworks/yii/1.1.13/web/auth/CWebUser.php(193): CConsoleApplication->getSession()

我可以理解会话不可用于控制台命令,但为什么它甚至可以访问会话?我对 Yii 框架不是很好。 [class]::mode()->find($criteria) 我应该如何使用 ActiveRecord 为对象充气?好像和我在网上找的例子一样

非常感谢任何帮助

这里是一个命令类的例子

<?php

class FlahCommand extends CConsoleCommand
{
    var $id;

    public function actionIndex() {
        return 0; // not implemented
    }

    public function actionBlah($contactId=0) {
        $criteria=new CDbCriteria;
        $criteria->select='first_name';
        $criteria->condition='id=:contactid';
        $criteria->params=array(':contactid'=>$contactId);
        $contact=Contact::model()->find($criteria); // <-- exception occurs here... strange
        echo '<pre>';
        var_dump($contact->first_name);
        echo '</pre>';

        return 0;

    }

}

【问题讨论】:

  • 你确定这就是你进入你的 consoleCommand 类的所有代码吗?
  • 我没有列出任何代码,我只是列出了一个我知道它在 $contact=Contact::model()->find($criteria); 上崩溃的 sn-p行
  • @AliMasudianPour 我已经用示例命令类修改了这个问题。
  • 这很奇怪。您是否在console.php 配置文件中设置了任何CWebUser 配置?或者您的Contact 模型是否有任何附加的behaviorCWebUser 交互?
  • 我会检查一下,正如我所提到的,虽然我不精通 Yii,但我对 zend、code igniter 和 Laravel 有更多的经验。但我会看看我能找到什么

标签: php activerecord yii console command


【解决方案1】:

使用 yii 控制台功能时,请注意 console.php 是控制台应用程序的配置文件,就像 main.php 存储 yii Web 应用程序的参数和选项一样。因此,当您在yii 1.1.13 中创建应用程序时,默认情况下它在console.php 中没有导入参数,此参数负责处理 yii 自动加载的一部分,因此您将丢失类,我所做的是添加跟随我的console.php 作为文件内数组的新元素

'import'=>array(
            'application.models.*',
            'application.components.*',
            'application.behaviors.*',
            'application.modules.content.*',
            'application.modules.content.models.*',
            'application.extensions.*',
    ),

希望这可以解决您的问题,同时请注意,虽然这是自动加载多个类,但您可能不需要所有这些类,但使用特定名称文件的名称而不是 * 通配符可能是最佳做法。

【讨论】:

    【解决方案2】:

    好吧,我最终发现客户包含了一个我错过的模型。现在解决了,感谢人们提供的见解

    【讨论】:

      猜你喜欢
      • 2016-09-25
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      相关资源
      最近更新 更多