
SiZE
29.09.2016
07:12:19
это ж аттрибут йопта. с ним можно работать - изменить для сохранения нового, удалить

Ilya
29.09.2016
07:13:20
Это все хорошо, но я немного о другом

Александр
29.09.2016
07:13:28
например в форме будет выбор из селекта...

Ilya
29.09.2016
07:14:03
Что если я вызываю зависимость, я ожидаю получить её содержимое в свойстве с названием столбца, а не в свойстве, с названием функции

Google

Ilya
29.09.2016
07:14:21
Я не говорю, что это вызывает ошибки, я говорю, что было бы удобнее

SiZE
29.09.2016
07:14:35
ну это пожалуй как ожидать что тебе майбах покататься дадут после этого :D

Anatoly
29.09.2016
07:14:37
Нет, в атрибут вы его не получите
Это разные понятия

Ilya
29.09.2016
07:14:48
ведь мы в любом случае сможем получить индекс, обратившись в ['related_name']['index']

SiZE
29.09.2016
07:15:20
столбец и зависимость не одно и то же.

Anatoly
29.09.2016
07:15:54

Ilya
29.09.2016
07:15:58
Я согласен, но разве кто-то оставляет столбец с названием индекса, если есть подгруженная зависимость?

SiZE
29.09.2016
07:16:04
пример:
function getProfile() { return $this->hasOne(); }
function getProfileActivated() { return $this->hasOne()->active(); }
fcuntion getProfileDisabled() { return $this->hasOne()->disabled(); }

Ilya
29.09.2016
07:16:05
Так нет же

Anatoly
29.09.2016
07:16:07
"разве кто-то"?

Ilya
29.09.2016
07:16:09
я не говорю про объекты

Anatoly
29.09.2016
07:16:10
Кто не оставляет?

Google

Ilya
29.09.2016
07:16:15
Если мы используем asArray()
Я забыл упомянуть, моя ошибка
Там же мы не будем уже использовать save()

Anatoly
29.09.2016
07:16:46
Ну ты можешь определить метод fields() в модели, чтобы asArray работал как тебе нужно

SiZE
29.09.2016
07:17:00
+1

Ilya
29.09.2016
07:17:48
Сейчас ознакомимся)
Я правильно понял?
public function fields()
{
return [
'userExample' => 'user_example'
];
}

Anatoly
29.09.2016
07:24:57
return [
'arrayField' => 'objectField',
'arrayField2' => function ($model) {
return $model->objectField2;
},
];

Ilya
29.09.2016
07:25:46
Т.е.
public function fields()
{
return [
'user_example' => 'userExample'
];
}

SiZE
29.09.2016
07:25:59
да
но не так )

Ilya
29.09.2016
07:26:14
?)
В чем ошибка?)

SiZE
29.09.2016
07:27:39
вроде все ок

Anatoly
29.09.2016
07:27:44
https://github.com/yiisoft/yii2/blob/master/framework/base/Arrayable.php#L64

Ilya
29.09.2016
07:33:19
Хм, я так понял, название элемента возвращаемого массива - то, что мы хотим видеть, а его значение - то, откуда это брать.
Только вот в чем проблема. Добавление в модель следующего кода, никак не повлияла на возвращаемые этой моделью данные:
public function fields()
{
return [
'nlesson' => 'next_lesson'
];
}

Anatoly
29.09.2016
07:34:31
А как ты массив получаешь из модели?

Ilya
29.09.2016
07:34:53
В вызове сразу указываю asArray()->all()
или это работает только для toArray?

Google

Ilya
29.09.2016
07:35:27
Я просто ни разу не использовал toArray и предполагаю, что это функция фреймворка
а не разработчика

Anatoly
29.09.2016
07:36:12
Только toArray
asArray вернёт ответ PDO как массив

Ilya
29.09.2016
07:36:34
Печально

Anatoly
29.09.2016
07:37:07
Неясна прикладная задача. Я уверен, что есть лучшие способы её решения
API?

Ilya
29.09.2016
07:37:14
Поэтому я и толкую, если мы сразу в вызове указали, что будем работать с данными только как с массивом, почему не называть свойства по человечески
У меня это решается, на данный момент, так:
$item['user_example'] = $item['userExample'];
unset($item['userExample'];

Степан
29.09.2016
07:38:19
Где можно подробно почитать что можно в модели писать, а что в контроллере? У меня сейчас так получается что я и там что то сделаю, и там. Там логика и там логика, там данные и там данные.

SiZE
29.09.2016
07:38:21
потому что заменять значение с одним типом данных на другой плохая практика
это неявно и повлечет ошибки.

Степан
29.09.2016
07:39:32
Ок) а выжимки какие нибудь, статьи с примерами?

Ilya
29.09.2016
07:39:49
Черт, я дико туплю
Я рассматривал со стороны эту фичу, как выродок GII, поэтому забыл, что там можно генерировать любые данные и по-любому их изменять
Прошу прощения, за пустую дисскуссию
и спасибо, что вправили мозги)

Anatoly
29.09.2016
07:40:59
Gii в чистом виде так себе. Мы его кастомизируем, например, под себя

Ilya
29.09.2016
07:41:34
Просто редко что изменял в моделях, для создания API стандартных методов вполне хватает)
Только вот слегка раздражает, когда не понятно по какой причине он начинает добавлять нули названию функции

Google

Ilya
29.09.2016
07:42:16
Хотя аналогичного названия там же нет

Artem
29.09.2016
08:27:00
Привет всем. Народ кто знает как в Yii2 с помощью DAO сделать update нескольких строк таблиц БД наиболее эффективно? Модели не используются.

Дмитрий
29.09.2016
09:05:39
вариантов немного как бэ )

Artem
29.09.2016
09:06:58
Да уж. Спасибо Дмитрий. Буду делать в цикле и страдать :)

Дмитрий
29.09.2016
09:08:30
Вам виднее, конечно, нужен ли там цикл. От конкретной задачи зависит.

Виталий
29.09.2016
09:26:19

Anatoly
29.09.2016
09:32:39

Ilya
29.09.2016
10:26:26
Есть таблица 1.
В ней есть связь к таблице 2.
В таблице 2 есть связь к таблице 3.
Можно ли в модели прописать так, чтобы по методу getSomething отадавались сразу данные таблицы 3? Т.е. без данных таблицы 2.
Например:
Группа -> Заявки в группу -> Пользователь
И при записи
Group::find()->with('users')->all();
получать список пользователей, оставивших заявки
А не список заявок, с зависимостью к пользователю

Anatoly
29.09.2016
10:26:52
Можно, см. via

Ilya
29.09.2016
10:31:54
в viaTable используются поля промежуточной таблицы, в качестве индекса?
Т.е.
return $this->hasMany(Orders::className(), ['group' => 'index'])
->viaTable('users', ['index', 'user']);
Где user поле таблицы orders
?
Просто у меня, когда пытаюсь ввести в viaTable 'index' вместо 'user', он приплетает индекс из таблицы Groups, а не Orders
А поле 'user' попросту не видит

Artem
29.09.2016
10:36:16

Anatoly
29.09.2016
10:40:26

Artem
29.09.2016
10:41:04
Нет модели не использутся. Спасибо.

Antony
29.09.2016
10:49:27
Подскажите как в activeRecord задать правило по условию?

Google

Anatoly
29.09.2016
10:49:57
return [
['name', 'required', 'when' => function() {}],
];

Ilya
29.09.2016
10:51:20
Так все же почему я не могу нормально получить данные по запросу:
return $this->hasMany(Orders::className(), ['group' => 'index'])->viaTable('user', ['index' => 'user']);

Antony
29.09.2016
10:52:31

Ilya
29.09.2016
10:53:05
Разве запись viaTable('user', ['index' => 'user']) в данном случае не означает "Искать в таблице user пользователя, у которого поле index равно значению пол user в таблице orders"?
И никто не нашел мою ошибку?(

Anatoly
29.09.2016
11:03:33
Илья, в документации на русском языке это уже разжёвано. Могу дать ссылку

Ilya
29.09.2016
11:04:18
Ладно, если никто и не читал, то ошибка была в том, что я пытался построить связь цепочкой. Т.е. из таблицы group найти связь с orders и найти связь с user
И никто не нашел, что ошибка была в том, что нужно было строить связь, основываясь на логике "Через". Т.е. найти в таблице user через (via) orders
Когда я просто пытался провести линию напрямую

Anatoly
29.09.2016
11:04:45
Никто и не искал, я полагаю, потому и не нашёл тоже никто

Antony
29.09.2016
11:05:17
Можно мне ссыль на актуальную русскую доку.

Ilya
29.09.2016
11:05:27
https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/README.md
И, между прочим, этот раздел вообще не содержит никакой, по сути, информации. Кроме примера кода и объяснения того, как работают промежуточные таблицы, а не объяснения, как работают данные методы.

Borisov
29.09.2016
11:15:51
английская дока намного информативнее

Antony
29.09.2016
11:20:32
Я в основном на английской сижу, но некоторые непонятные моменты подглядеть в русской неплохо тоже.
Кстати где найти все допустимые параметры валидации в rules?
Ибо в доках не могу найти тот же
when
,
range

Anatoly
29.09.2016
11:28:50
Я обычно заглядываю в yii\validators\Validator
Там вполне ясно всё описано

Artem
29.09.2016
11:29:05
https://nix-tips.ru/yii2-api-guides/guide-ru-tutorial-core-validators.html
Или в класс нужного валидатора смотреть в его публичные св-ва

Antony
29.09.2016
11:32:10
Да, все нашел в публичных свойствах.
Еще небольшое уточнение, если я задаю в scenarios нужные поля для сценариев, то в rules все равно нужно прописывать 'on' => 'scenario' или будут применятся только поля, указанные в сценарии?
В зависимости поведения как добавить поля во все сценарии? Получается либо нужно дублировать поля в scenarios либо задавать сценарии ко всем полям?