По новой ActiveRecord вопросы

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

По новой ActiveRecord вопросы

Сообщение maleks »

1) В yii1 можно было устанавливать значения св-в по умолчанию через объявление одноименного св-ва:

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

class Post extends CActiveRecord
{
    public $title='пожалуйста, введите заголовок';
    …
}
В yii2 такое не работает. Убрали?

2) Вот эта связь link. Ее предназначение - только в облегчении сохранения новых(и измененных?) записей (то что им проставится автоматом внешний ключ) или для чего то еще?
Yii2 universal module sceleton - for basic and advanced templates
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

Re: По новой ActiveRecord вопросы

Сообщение mihail_dev »

1) устанавливать значения св-в по умолчанию надо в бд! а то что вы написали
то не совсем значение скорее всего placeholder - его правильнее задавать в шаблоне!

2) https://github.com/yiisoft/yii2/blob/ma ... ationships - специальные функции облегчающие работу со связями
Изображение
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: По новой ActiveRecord вопросы

Сообщение samdark »

1) Убрали. Либо в базе, либо через валидатор.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: По новой ActiveRecord вопросы

Сообщение maleks »

mihail_dev писал(а): 2) https://github.com/yiisoft/yii2/blob/ma ... ationships - специальные функции облегчающие работу со связями
та я доки то эти читал.
Yii2 universal module sceleton - for basic and advanced templates
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: По новой ActiveRecord вопросы

Сообщение maleks »

Еще одна непонятка.
Для таблицы:

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

CREATE TABLE `tbl_nidlangnew` (
 `nid` int(11) NOT NULL,
 `lang` varchar(2) NOT NULL,
 `body` varchar(200) NOT NULL DEFAULT 'bodynew',
 PRIMARY KEY (`nid`,`lang`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
с помощью gii сгенерил модель и далее в контроллере пишу:

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

$nl = new Nidlangnew();
var_dump($nl->body); //null 
выдает мне - null. Почему null?, ожидаю то 'bodynew', и в yii1 дает мне в данной ситуации 'bodynew'.
Yii2 universal module sceleton - for basic and advanced templates
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: По новой ActiveRecord вопросы

Сообщение samdark »

Потому что модель не из базы.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: По новой ActiveRecord вопросы

Сообщение maleks »

Sam Dark писал(а):Потому что модель не из базы.
ну и что что не из базы? О дефаулт значении инфа берется из схемы, а не из конкретной строки таблицы.
Имхо очень нелогично получилось.
Yii2 universal module sceleton - for basic and advanced templates
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: По новой ActiveRecord вопросы

Сообщение samdark »

Схема при new не читается, насколько помню.
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: По новой ActiveRecord вопросы

Сообщение anton44eg »

Кстати да, было бы логично
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: По новой ActiveRecord вопросы

Сообщение samdark »

Закидывайте в виде issue.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: По новой ActiveRecord вопросы

Сообщение maleks »

А AR еще будет существенно переделываться или впринципе вот к данной реализации и шли?
Yii2 universal module sceleton - for basic and advanced templates
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: По новой ActiveRecord вопросы

Сообщение samdark »

Примерно к этому и шли. Есть замечания?
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: По новой ActiveRecord вопросы

Сообщение maleks »

да я еще не разобрался что там к чему и как оно работает внутри и всю картину не вижу. Из исходного кода буду разбираться, вот поэтому и спрашивал, будет ли он меняться, т.к. он там не такой простой для понимания задуманных идей.
Yii2 universal module sceleton - for basic and advanced templates
6pblcb
Сообщения: 71
Зарегистрирован: 2012.03.02, 11:24
Откуда: Omsk

Re: По новой ActiveRecord вопросы

Сообщение 6pblcb »

maleks писал(а):В yii1 можно было устанавливать значения св-в по умолчанию через объявление одноименного св-ва
Объясните плиз кто ни будь в каком именно контексте не работает - у меня работает.
Sam Dark писал(а):Примерно к этому и шли. Есть замечания?
Не замечание, скорее вопросы/предложения:

1) Можно ли как то сейчас заставить AR при записи вместо "" (empty string) подставлять NULL?
На сколько я понял это происходит тут. Мб стоит сделать настраиваемые параметры для

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

Schema::TYPE_TEXT   
Schema::TYPE_STRING
что бы можно были из конфига регулировать сохранять null или '' (empty string).
Или это bad way для этих типов данных?

2) По поводу dirtyAttributes, а именно по поводу этой строки.
При строгом сравнении

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

$value !== $this->_oldAttributes[$name]
получается, что данные типа integer приходящие из формы будут всегда не равны

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

 '1' !== 1
и соответственно теряется смысл dirtyAttributes.
ps: рамки этого вопроса могут быть шире, чем одна строка выше, но думаю суть донёс.

3) Найдется ли место в ядре для алиаса над Expression, для инкрементирования значения в базе:

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

//Вместо
$model->setAttribute('foo', new Expression("[[foo]]+:foo", [":foo" => '1'])); // ps: код не проверил, по идее должен работать
//alias
$model->setIncrementAttribute('foo', 1);
 
ps2: если что могут залить вопросы на github.
Последний раз редактировалось 6pblcb 2014.03.18, 10:07, всего редактировалось 1 раз.
YII2?, начинаю продолжать заканчивать делать. I'm gonna go build my own php-framework, with blackjack and hookers. In fact, forget the php-framework!
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: По новой ActiveRecord вопросы

Сообщение maleks »

6pblcb писал(а):
maleks писал(а):В yii1 можно было устанавливать значения св-в по умолчанию через объявление одноименного св-ва
Объясните плиз кто ни будь в каком именно контексте не работает - у меня работает.
Следующий контекст:
email - это поле в таблице (default на уровне базы в ''), по которой создается следующая модель:

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

class Customer extends \yii\db\ActiveRecord
{
    public $email = 'default@mail.ru'; // пробую
    /**
     * @inheritdoc
     */
        // ...
}
// В контроллере:
$cu = new Customer();
var_dump($cu);
var_dump($cu->email); // естественно покажет default@mail.ru'
$cu->name = '111';
$s = $cu->save(false);  // НЕ сохранит default@mail.ru'. А сохранит - ''
var_dump($s); // true , т.е. сохранено успешно
 
Yii2 universal module sceleton - for basic and advanced templates
6pblcb
Сообщения: 71
Зарегистрирован: 2012.03.02, 11:24
Откуда: Omsk

Re: По новой ActiveRecord вопросы

Сообщение 6pblcb »

Понял, спасибо.
YII2?, начинаю продолжать заканчивать делать. I'm gonna go build my own php-framework, with blackjack and hookers. In fact, forget the php-framework!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: По новой ActiveRecord вопросы

Сообщение samdark »

1) Можно через валидатор default выставлять значение null в случае пустого значения.
2) Уже упоминалось тут https://github.com/yiisoft/yii2/issues/622, но issue, похоже, создать забыли. Если не трудно, создайте.
3) Киньте в виде issue, посмотрим.
Аватара пользователя
KiTE
Сообщения: 112
Зарегистрирован: 2012.04.12, 14:47

Re: По новой ActiveRecord вопросы

Сообщение KiTE »

maleks писал(а):1) В yii1 можно было устанавливать значения св-в по умолчанию через объявление одноименного св-ва
Можно init() переопределить.

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

class Post extends CActiveRecord
{
    public function init()
    {
        parent::init();
        $this->title = 'Бла-бла-бла';
    }
    …
} 
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: По новой ActiveRecord вопросы

Сообщение maleks »

про init() то понятно.
Я создавал вопрос, разработчики представили дополнительный метод loadDefaultValues(), которым можно пользоваться.
Хотя, откровенно говоря, я ожидал что тут что то просто поменяется. :)
Yii2 universal module sceleton - for basic and advanced templates
incrize
Сообщения: 5
Зарегистрирован: 2012.12.16, 14:19

Re: По новой ActiveRecord вопросы

Сообщение incrize »

Всем привет.
Вопрос по поводу oldAttributes.
Есть желание использовать oldAttributes в методе afterSave, чтобы выполнять ряд действий по обновлению данных, но столкнулся с проблемой, в методе updateInternal есть такой код:

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

        foreach ($values as $name => $value) {
            $this->_oldAttributes[$name] = $this->_attributes[$name];
        }
        $this->afterSave(false);
То есть в итоге в afterSave приходят уже новые oldAttributes.
Понятно, что значения атрибутов можно предварительно самостоятельно сохранить, но хотелось использовать встроенные средства.
Возможно ли изменить эту логику?
Ответить