Ilya 🃏
ведь мы в любом случае сможем получить индекс, обратившись в ['related_name']['index']
SiZE
столбец и зависимость не одно и то же.
Toly
ведь мы в любом случае сможем получить индекс, обратившись в ['related_name']['index']
И при попытке вызвать save у основной модели, вы получите пинок
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
это неявно и повлечет ошибки.
s
Ок) а выжимки какие нибудь, статьи с примерами?
Ilya 🃏
Черт, я дико туплю Я рассматривал со стороны эту фичу, как выродок GII, поэтому забыл, что там можно генерировать любые данные и по-любому их изменять
Ilya 🃏
Прошу прощения, за пустую дисскуссию
Ilya 🃏
и спасибо, что вправили мозги)
Toly
Gii в чистом виде так себе. Мы его кастомизируем, например, под себя
Ilya 🃏
Просто редко что изменял в моделях, для создания API стандартных методов вполне хватает)
Ilya 🃏
Только вот слегка раздражает, когда не понятно по какой причине он начинает добавлять нули названию функции
Ilya 🃏
Хотя аналогичного названия там же нет
Тёмыч
Привет всем. Народ кто знает как в Yii2 с помощью DAO сделать update нескольких строк таблиц БД наиболее эффективно? Модели не используются.
Йцукенг
вариантов немного как бэ )
Тёмыч
Да уж. Спасибо Дмитрий. Буду делать в цикле и страдать :)
Йцукенг
Вам виднее, конечно, нужен ли там цикл. От конкретной задачи зависит.
Виталий
Да уж. Спасибо Дмитрий. Буду делать в цикле и страдать :)
Зачем страдать? Задача детально не описана. Если Достаточно выполнения SQL-запроса вида UPDATE tbl SET x=y WHERE z=a, можете его оформить одним запросом
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
для этой задачи не используются. Ребят всем спасибо. Сделал через цикл. Там небольшие наборы данных и редко используемый функционал поэтому терпимо.
Если есть модель привязанная к таблице, можно сделать очень просто: User::updateAll(['status' => 1], ['ids' => [1,2,3,4]);
Тёмыч
Нет модели не использутся. Спасибо.
Antony
Подскажите как в activeRecord задать правило по условию?
Toly
return [ ['name', 'required', 'when' => function() {}], ];
Ilya 🃏
Так все же почему я не могу нормально получить данные по запросу: return $this->hasMany(Orders::className(), ['group' => 'index'])->viaTable('user', ['index' => 'user']);
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