нет выборки из БД в компоненте

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

нет выборки из БД в компоненте

Сообщение evgeniy123 »

хочу сделать выборку из базы данных нужного значения параметра, но происходит что-то странное при сохранении одной модели. сама модель Tokens:

Код: Выделить всё



    public function beforeSave($insert){
        if (parent::beforeSave($insert)) {

            if($this->scenario = 'create'){

                $this->access_token = sha1(mt_rand(10000, 99999) . time() . mt_rand(10000, 99999));
                $this->access_token_exp = new Expression('NOW()+INTERVAL ' . Yii::$app->settings->getValue('interval_access_token_exp '). ' DAY');
                $this->renew_token = sha1(mt_rand(10000, 99999) . time() . mt_rand(10000, 99999));
                $this->renew_token_exp = new Expression('NOW()+INTERVAL ' . Yii::$app->settings->getValue('interval_renew_token_exp') . ' DAY');

            }
            return true;
        }
        return false;
    }
    
    
....
        if(!$token_for_insert->save()){
        ....
        
Component:

Код: Выделить всё


class SettingsComponent extends Component {

    public $_settings;
    public $connection;

    public function init(){
        $this->connection = Yii::$app->db;
        parent::init();
    }


    public function getValue($name){

        $row = $this->connection->createCommand('SELECT * FROM '.Settings::tableName())->queryOne();

        Yii::warning(serialize($row[$name]));  // Condition

        if($row[$name]) {  // Condition
            return $row[$name];
        }

        else throw new  BadRequestHttpException('No this param !');

    }

}

Error:

Код: Выделить всё


yii\web\BadRequestHttpException: No this param ! in /var/www/pmn/common/components/SettingsComponent.php:41
Stack trace:
#0 /var/www/pmn/backend/models/Tokens.php(99): common\components\SettingsComponent->getValue('interval_access...')
#1 /var/www/pmn/vendor/yiisoft/yii2/db/ActiveRecord.php(490): backend\models\Tokens->beforeSave(true)

....
когда я использую этот компонент в коде раннем по выполнению то все ок отрабатывается, а тут возвращает (N;) . условие не обрабатывается :( понять не могу что такое творится такое в beforesave модели что я не могу взять это поле ?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: нет выборки из БД в компоненте

Сообщение zelenin »

ну так посмотри, что у тебя лежит в БД. продебажь что сохраняется.

if($this->scenario = 'create'){ - "=" - оператор присвоения
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: нет выборки из БД в компоненте

Сообщение evgeniy123 »

zelenin писал(а): 2017.09.23, 01:23 ну так посмотри, что у тебя лежит в БД. продебажь что сохраняется.

if($this->scenario = 'create'){ - "=" - оператор присвоения
У меня чтение из таблицы settings. Там данные статические. Работаю с таблицей tokens. В модели Tokens у меня уже есть обращение к компоненту settings и читается все ок. А вот когда достигает момента попытки сохранение в таблицу tokens и чтение компонента settings идёт в beforesave Token то мне не возвращает значения их бд хотя до этого по коду буду нормально по чтению. Я не понимаю что происходит. Дебажил выводом warning в YII. Все достаточно чётко показывается. Логику не понимаю прочему так
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: нет выборки из БД в компоненте

Сообщение maleks »

evgeniy123 писал(а): 2017.09.23, 09:41 Логику не понимаю прочему так
Выше же ответили:

Код: Выделить всё

if($this->scenario = 'create'){
Для сравнения надо ==
Yii2 universal module sceleton - for basic and advanced templates
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: нет выборки из БД в компоненте

Сообщение evgeniy123 »

maleks писал(а): 2017.09.23, 10:02
evgeniy123 писал(а): 2017.09.23, 09:41 Логику не понимаю прочему так
Выше же ответили:

Код: Выделить всё

if($this->scenario = 'create'){
Для сравнения надо ==
помогло. спасибо :) буду внимательнее
Закрыто