Какой паттерн лучше использовать?
Какой паттерн лучше использовать?
В yii можно реализовать сервисы и гибко управлять данными.
http://localhost/users?fields=id,email&expand=profile
Но, если используется Model или AR
У меня данные выбираются прямым запросом с помощью createCommand, AR не применим, т.е. выбирается массив данных, как можно преобразовать массив в объект класса Model, что-то типа DTO-шки, чтобы можно было также гибко управлять запросами?
http://localhost/users?fields=id,email&expand=profile
Но, если используется Model или AR
У меня данные выбираются прямым запросом с помощью createCommand, AR не применим, т.е. выбирается массив данных, как можно преобразовать массив в объект класса Model, что-то типа DTO-шки, чтобы можно было также гибко управлять запросами?
Последний раз редактировалось user 2020.01.03, 02:58, всего редактировалось 1 раз.
Re: Какой паттерн лучще использовать?
Переместить этот запрос в CREATE VIEW в БД и сделать AR, в tableName() которой указать этот view.
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Какой паттерн лучще использовать?
Но не факт, что эти объекты не будут только для чтения. Если требуется и чтение, и изменение, то лучше использовать Data Mapper.
Re: Какой паттерн лучще использовать?
есть еще же Репозиторий
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Какой паттерн лучще использовать?
и где в yii используется Data Mapper?yiiliveext писал(а): ↑2020.01.01, 18:13И на чем же он построен, если вам требуются напрямую использовать классы фреймворка для формирования выборки данных?
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Какой паттерн лучще использовать?
Понял, просто в yii ORM реализована, это будет мой первый паттерн
а DTO не подойдет?
а DTO не подойдет?
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Какой паттерн лучще использовать?
DTO - это то, что может возвращать репозиторий, простейший объект для передачи данных между слоями. Иногда делают так, что репозиторий возвращает готовую сущность, вместо DTO, а иногда гидратор выносят в отдельный сервис и тогда репозиторий возвращает DTO.
Re: Какой паттерн лучще использовать?
спасибо, попробую теперь во всем этом разобраться
Re: Какой паттерн лучще использовать?
вот нашел описание этого паттерна https://designpatternsphp.readthedocs.i ... EADME.htmlyiiliveext писал(а): ↑2020.01.01, 13:15 Но не факт, что эти объекты не будут только для чтения. Если требуется и чтение, и изменение, то лучше использовать Data Mapper.
все работает, а если мне нужно забрать все данные, немного не понимаю.
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Какой паттерн лучще использовать?
Реализуйте метод findAll(), который будет возвращать коллекцию сущностей/DTO.user писал(а): ↑2020.01.02, 09:22вот нашел описание этого паттерна https://designpatternsphp.readthedocs.i ... EADME.htmlyiiliveext писал(а): ↑2020.01.01, 13:15 Но не факт, что эти объекты не будут только для чтения. Если требуется и чтение, и изменение, то лучше использовать Data Mapper.
все работает, а если мне нужно забрать все данные, немного не понимаю.
Re: Какой паттерн лучще использовать?
что-то у меня не особо получилось
реализовал на коленке репозитогрий и он мне возвращает тот же массив, что и на входе, а управлять полями я не могу
реализовал на коленке репозитогрий и он мне возвращает тот же массив, что и на входе, а управлять полями я не могу
Re: Какой паттерн лучше использовать?
Ну ппц, наговорили человеку. После такого, только и остается, что паттерны изучать))). Может это лучше подойдет? https://www.yiiframework.com/doc/api/1. ... rds-detail Как раз для создания AR по данным из ассоциативных массивов.
Re: Какой паттерн лучше использовать?
а причем 1.1? хотя в yii2 есть тоже ) попробую разобратьсяanton_z писал(а): ↑2020.01.03, 07:05 Ну ппц, наговорили человеку. После такого, только и остается, что паттерны изучать))). Может это лучше подойдет? https://www.yiiframework.com/doc/api/1. ... rds-detail Как раз для создания AR по данным из ассоциативных массивов.
хотя в документации есть упоминание
я год назад спрашивал про это тут, никто не ответилПри работе с базой данных через DAO все данные представляются в виде строк, что не всегда корректно. Особенно учитывая, что в JSON для чисел есть соответствующий тип. При использовании ActiveRecord значения числовых столбцов приводятся к integer на этапе выборки из базы: yii\db\ActiveRecord::populateRecord().
нашел решение, но для выборки одной записи.
https://coderius.biz.ua/blog/article/yi ... ql-zaprosa
но опять проблема, а если несколько записей?
то, что должна быть таблица в БД с данной моделью, понятно, хотя данные приходят из внешнего источника.
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Какой паттерн лучще использовать?
Для целей инициализации сущностей из данных выборки вам нужен гидратор.
Customer::findBySql('SELECT * FROM customer')->all();я год назад спрашивал про это тут, никто не ответил
нашел решение, но для выборки одной записи.
https://coderius.biz.ua/blog/article/yi ... ql-zaprosa
но опять проблема, а если несколько записей?
Пы.Сы. Может вам все же лучше использовать AR? Приведите лучше пример запроса, который вы не можете совместить с AR или QB.
Re: Какой паттерн лучще использовать?
Человек вроде про Yii спрашивает, мне бы это никак не помогло, только бы в сторону увело от решения. Про репозитории и DataMapper тоже самое. Из темы я понял что TS ищет решение на yii, с паттернами незнаком.yiiliveext писал(а): ↑2020.01.03, 09:28 Для целей инициализации сущностей из данных выборки вам нужен гидратор.
Для Yii2 я бы сделал статический метод для инкапсуляции создания объекта из ассоциативных массивов:
Код: Выделить всё
$record = ActiveRecordSubclass::instantiateWith($row);
class ActiveRecordSubclass extends ActiveRecord
{
//для одного
public static function instantiateWith(array $row): ActiveRecordSubclass
{
$records = self::find()->populate([$row]);
return reset($records) ?: null;
}
//для нескольких
public static function instantiateAllWith(array $rows): ActiveRecordSubclass
{
return self::find()->populate($rows);
}
}
Для приведения типов в AR можно использовать это: https://www.yiiframework.com/doc/api/2. ... stbehavior.
Представленный выше метод будет работать с этим поведением корректно.
Второй путь это разобраться, почему не получается с ActiveQuery запрос сделать, но мало ли откуда TS данные берет.
Re: Какой паттерн лучще использовать?
спасибо большое, я бы шаблоны изучил, но это параллельно, сейчас надо работаться с текущей задачей.
а не получатся потому что идет запрос с бд, он очень сложный и ar он просто не вытянет, сфера применения ar ограничена, если интересно я в личку кину один из таких заппросов