Yii ActiveRecord и консольные команды не работают

У меня проблема с Yii + CDbCriteria / ActiveRecord в сочетании с консольными командами Yii

Yii версия 1.1.13

Приведенный ниже код работает при вызове из контроллера. Потому что HTTP-сессия доступна.

$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 я получаю следующую ошибку и две верхние строки трассировки:

    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 Framework. Является ли [class] :: mode () -> find ($ критериев), как я должен надувать объект с помощью 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;

}

}

0

Решение

При работе с функцией консоли yii учитывайте console.php который является файлом конфигурации для консольных приложений так же, как main.php хранит параметры и параметры для веб-приложений yii. Итак, когда вы создаете приложение в 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.*',
),

Надеюсь, что это решит вашу проблему, также имейте в виду, что, хотя это автозагрузка нескольких классов, вам могут не понадобиться все из них, используя имя определенных именных файлов вместо * Подстановочный знак может быть лучшей практикой.

1

Другие решения

Хорошо, я понял, что в клиенте была модель, которую я пропустил. Это решено теперь спасибо за понимание люди дали

0