Yii ActiveRecord和控制台命令无法正常工作

与Yii控制台命令结合使用时,我遇到Yii + CDbCriteria / ActiveRecord的问题</ p>

Yii版本1.1.13 </ p>

以下代码在从控制器调用时有效。 因为HTTP会话是可访问的。</ p>

  $ criteria = new CDbCriteria; 
$ criteria-&gt; select ='first_name';
$ criteria-&gt; condition =' ID =:使用ContactID ';
$的基准 - &GT; PARAMS =阵列(':使用ContactID'= 1→4);
$的接触=端子::模型() - &GT;发现($条件); //&lt; - 异常发生在这里... strange
echo'&lt; pre&gt;';
var_dump($ contact-&gt; first_name);
echo'&lt; / pre&gt;';
</ code> < / pre>

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

  exception'CException'with message  'CConsoleApplication及其行为没有名为“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-&gt; __ call('getSession',Array)
#1 /home/stm/stm_frameworks/yii/1.1.13/web/auth/CWebUser.php(193) :CConsoleApplication-&gt; getSession()
</ code> </ pre>

我可以理解会话不可用于控制台命令,但为什么它甚至可以访问会话?我是 Yii框架不是很好。是[class] :: mode() - &gt; find($ criteria)我应该如何使用ActiveRecord膨胀对象?似乎与我在网上找到的例子相匹配</ p>
\ n

任何帮助都是grea tly赞赏</ p>

以下是命令类的示例</ p>

 &lt;?php 

class FlahCommand扩展CConsoleCommand
{\ n var $ id;

public function actionIndex(){
return 0; //未实现
}

公共函数actionBlah($ contactId = 0){
$ criteria = new CDbCriteria;
$ criteria-&gt; select ='first_name';
$ criteria-&gt; condition ='id =:contactid';
$ criteria-&gt; params = array(':contactid'=&gt; $ contactId);
$ contact = Contact :: model() - &gt; find($ criteria); //&lt; - 异常发生在这里...奇怪
echo'&lt; pre&gt;';
var_dump($ contact-&gt; first_name);
echo'&lt; / pre&gt;';

返回0;

}

}
</ </ code> </ pre>
</ div>

展开原文

原文

I have a problem with Yii + CDbCriteria / ActiveRecord when combined with Yii Console Commands

Yii version 1.1.13

The below code works when called from a controller. Because the HTTP Session is accessable.

$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>';

However, when accessing via Yii Console Command I receive the following error and top 2 strack trace lines:

    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()

I can understand that the session is not available to console commands, but why is it even accessing the session? I'm not great with Yii framework. Is [class]::mode()->find($criteria) how I should be inflating a object using ActiveRecord? Seems to match the examples I've found online

Any help is greatly appreciated

Here is an example of the command class

<?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;

    }

}

dprntkxh703029
dprntkxh703029 您还应该检查您的ContactScope的defaultScope或beforeFind。
接近 6 年之前 回复
doufubian3479
doufubian3479 我会检查,正如我所提到的,虽然我不熟悉你,但我对zend,codeigniter和Laravel有更多的经验。但我会看到我能找到的东西
接近 6 年之前 回复
douyi3307
douyi3307 这很奇怪。您是否在console.php配置文件中设置了任何CWebUser配置?或者您的Contact模型是否具有与CWebUser交互的任何附加行为?
接近 6 年之前 回复
douchi1945
douchi1945 我用示例命令类修改了这个问题。
接近 6 年之前 回复
dqyitt2954
dqyitt2954 我没有列出任何代码,我刚刚列出了一个片段,我知道它在$contact=Contact::model()->find($criteria)上崩溃了;线
接近 6 年之前 回复
duanhuang3074
duanhuang3074 你确定你已经进入consoleCommand类的所有代码了吗?
接近 6 年之前 回复

2个回答



好的我最终弄清楚客户端是否包含了我错过的模型。 它现在解决了感谢人们提供的见解</ p>
</ div>

展开原文

原文

Ok I ended up figuring out that the client was including a model which i'd missed. Its solved now thanks for the insight people gave



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

 <  code>'import'=&gt; array(
'application.models。*',
'application.components。*',
'application.behaviors。*',
'application.modules.content。* ',
'application.modules.content.models。*',
'application.extensions。*',
),
</ code> </ pre>

希望这可以解决 您的问题,也要注意虽然这是自动加载几个类,您可能不需要所有类,但使用特定名称文件的名称而不是 * </ code>通配符可能是最佳做法。 </ p>
</ div>

展开原文

原文

When working with the yii console feature, be aware of the console.php wich is the config file for console applications just as main.php stores params and options for yii web applications. So , when you create an app in yii 1.1.13 by default it does not have the import param inside the console.php, this param is responsible for handling part of yii autoloading so you will be missing classes, what i did was to add the following in my console.php as a new element of the array inside the file

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

hope this solves your problem, be also aware that although this is autoloading several classes you might not need all of them, using name of specific namesfiles instead of * wildcard could be best practice.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问