Ilya 🃏
ведь мы в любом случае сможем получить индекс, обратившись в ['related_name']['index']
SiZE
столбец и зависимость не одно и то же.
Toly
Ilya 🃏
Я согласен, но разве кто-то оставляет столбец с названием индекса, если есть подгруженная зависимость?
SiZE
пример:
function getProfile() { return $this->hasOne(); }
function getProfileActivated() { return $this->hasOne()->active(); }
fcuntion getProfileDisabled() { return $this->hasOne()->disabled(); }
Ilya 🃏
Так нет же
Toly
"разве кто-то"?
Ilya 🃏
я не говорю про объекты
Toly
Кто не оставляет?
Ilya 🃏
Если мы используем asArray()
Ilya 🃏
Я забыл упомянуть, моя ошибка
Ilya 🃏
Там же мы не будем уже использовать save()
Toly
Ну ты можешь определить метод fields() в модели, чтобы asArray работал как тебе нужно
SiZE
+1
Ilya 🃏
Сейчас ознакомимся)
Ilya 🃏
Я правильно понял?
public function fields()
{
return [
'userExample' => 'user_example'
];
}
Toly
return [
'arrayField' => 'objectField',
'arrayField2' => function ($model) {
return $model->objectField2;
},
];
Ilya 🃏
Т.е.
public function fields()
{
return [
'user_example' => 'userExample'
];
}
SiZE
да
SiZE
но не так )
Ilya 🃏
?)
Ilya 🃏
В чем ошибка?)
SiZE
вроде все ок
Toly
https://github.com/yiisoft/yii2/blob/master/framework/base/Arrayable.php#L64
Ilya 🃏
Хм, я так понял, название элемента возвращаемого массива - то, что мы хотим видеть, а его значение - то, откуда это брать.
Ilya 🃏
Только вот в чем проблема. Добавление в модель следующего кода, никак не повлияла на возвращаемые этой моделью данные:
public function fields()
{
return [
'nlesson' => 'next_lesson'
];
}
Toly
А как ты массив получаешь из модели?
Ilya 🃏
В вызове сразу указываю asArray()->all()
Ilya 🃏
или это работает только для toArray?
Ilya 🃏
Я просто ни разу не использовал toArray и предполагаю, что это функция фреймворка
Ilya 🃏
а не разработчика
Toly
Только toArray
Toly
asArray вернёт ответ PDO как массив
Ilya 🃏
Печально
Toly
Неясна прикладная задача. Я уверен, что есть лучшие способы её решения
Toly
API?
Ilya 🃏
Поэтому я и толкую, если мы сразу в вызове указали, что будем работать с данными только как с массивом, почему не называть свойства по человечески
Ilya 🃏
У меня это решается, на данный момент, так:
$item['user_example'] = $item['userExample'];
unset($item['userExample'];
s
Где можно подробно почитать что можно в модели писать, а что в контроллере? У меня сейчас так получается что я и там что то сделаю, и там. Там логика и там логика, там данные и там данные.
SiZE
потому что заменять значение с одним типом данных на другой плохая практика
SiZE
это неявно и повлечет ошибки.
SiZE
s
Ок) а выжимки какие нибудь, статьи с примерами?
Ilya 🃏
Черт, я дико туплю
Я рассматривал со стороны эту фичу, как выродок GII, поэтому забыл, что там можно генерировать любые данные и по-любому их изменять
Ilya 🃏
Прошу прощения, за пустую дисскуссию
Ilya 🃏
и спасибо, что вправили мозги)
Toly
Gii в чистом виде так себе. Мы его кастомизируем, например, под себя
Ilya 🃏
Просто редко что изменял в моделях, для создания API стандартных методов вполне хватает)
Ilya 🃏
Только вот слегка раздражает, когда не понятно по какой причине он начинает добавлять нули названию функции
Ilya 🃏
Хотя аналогичного названия там же нет
Тёмыч
Привет всем. Народ кто знает как в Yii2 с помощью DAO сделать update нескольких строк таблиц БД наиболее эффективно? Модели не используются.
Йцукенг
Йцукенг
вариантов немного как бэ )
Тёмыч
Да уж. Спасибо Дмитрий. Буду делать в цикле и страдать :)
Йцукенг
Вам виднее, конечно, нужен ли там цикл. От конкретной задачи зависит.
Toly
Ilya 🃏
Есть таблица 1.
В ней есть связь к таблице 2.
В таблице 2 есть связь к таблице 3.
Можно ли в модели прописать так, чтобы по методу getSomething отадавались сразу данные таблицы 3? Т.е. без данных таблицы 2.
Например:
Группа -> Заявки в группу -> Пользователь
И при записи
Group::find()->with('users')->all();
получать список пользователей, оставивших заявки
А не список заявок, с зависимостью к пользователю
Toly
Можно, см. via
Ilya 🃏
в viaTable используются поля промежуточной таблицы, в качестве индекса?
Ilya 🃏
Т.е.
return $this->hasMany(Orders::className(), ['group' => 'index'])
->viaTable('users', ['index', 'user']);
Ilya 🃏
Где user поле таблицы orders
Ilya 🃏
?
Ilya 🃏
Просто у меня, когда пытаюсь ввести в viaTable 'index' вместо 'user', он приплетает индекс из таблицы Groups, а не Orders
Ilya 🃏
А поле 'user' попросту не видит
Toly
Тёмыч
Нет модели не использутся. Спасибо.
Antony
Подскажите как в activeRecord задать правило по условию?
Toly
return [
['name', 'required', 'when' => function() {}],
];
Ilya 🃏
Так все же почему я не могу нормально получить данные по запросу:
return $this->hasMany(Orders::className(), ['group' => 'index'])->viaTable('user', ['index' => 'user']);
Antony
Ilya 🃏
Разве запись viaTable('user', ['index' => 'user']) в данном случае не означает "Искать в таблице user пользователя, у которого поле index равно значению пол user в таблице orders"?
Ilya 🃏
И никто не нашел мою ошибку?(
Toly
Илья, в документации на русском языке это уже разжёвано. Могу дать ссылку
Ilya 🃏
Ладно, если никто и не читал, то ошибка была в том, что я пытался построить связь цепочкой. Т.е. из таблицы group найти связь с orders и найти связь с user
И никто не нашел, что ошибка была в том, что нужно было строить связь, основываясь на логике "Через". Т.е. найти в таблице user через (via) orders
Ilya 🃏
Когда я просто пытался провести линию напрямую
Toly
Никто и не искал, я полагаю, потому и не нашёл тоже никто
Antony
Можно мне ссыль на актуальную русскую доку.
Ilya 🃏
https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/README.md