SiZE
бывают конечно документации, типа как у эластика или докера, хрен чо с полпинка найдешь, но у Yii все очень прозрачно
who are you
а мы тут в одной массе
who are you
это как школу объединить с институтом и задавать всем одинаковые задания 😄
Artur‌‌‌
Всем привет. Такой вопрос. я делаю batchInsert. Могу я как то получить id'шники всех новых записей?
The Ant
можно вычислить
Павел
По крайней мере в мускуле
The Ant
метод вернет количество вставленных записей, смотришь ласт инсерт ид и вычисляешь на основе этого
The Ant
http://www.yiiframework.com/forum/index.php/topic/72746-can-batchinsert-return-all-inserted-ids/
Sergey
The Ant
ну делай запрос тогда в мускул
The Ant
взять все иды больше первого вставленного
The Ant
они и будут наверное
Konstantin
"наверное"
Konstantin
а если кто-то еще вставил?
Konstantin
тут или другая СУБД, или вставлять по одному, или добавить колонку, вставить с уникальным идентификатором в ней, а потом запросить обратно
Konstantin
по-моему вставлять по одному - не такая и плохая идея
Сергей
Покритикуйте идею базового класса для DTO и DTO для ошибок: http://yiiframework.ru/forum/viewtopic.php?f=34&t=44075
Dmitriy
BaseDto без интерфейса. статические функции зачем ? в конструктор бы public function __construct(array $data = [], Container $container = null) { if(isset($container)){ $this->container = $container; } $this->setObject($data); } да бы мы управляли зависимостями. в ероор разве не лучше прокидывать обьект ?
Dmitriy
что бы было $user = new User(); $user->setName('aaa'); $user->setRole('Author'); $user->addGroup(new Group('Authors')); $dto = new UserDTO($user);
Сергей
В случаях когда сущность - это AR-томдель туда и прокидывается модель
Dmitriy
ну тут еще мое имхо. я бы не делал зазовый обьект с магией
Сергей
Можно я по порядку помучаю :) "BaseDto без интерфейса. " - можно поподробнеее? Зачем тут интерфейс?
Dmitriy
Да бы мы знали ничего не изменится. но я еще не понимаю зачем тут базовый класс
Dmitriy
для toJson ? toArray ?
Сергей
1) Чтобы использовать магию __Get. В DTO я пишу протектед свойства и всё, а геттеры через магию работают. 2) метод make для вызова конструктора. например: EmployeeDto::make($name, $role);
Dmitriy
$error = new Error(); $error->alert('name') $dto = new ErrorDTО($error); Вот так разве не лучше ?
Dmitriy
protected function makeErrors сделать ошибки ?- делать ошибки ?
Сергей
class NameDto extends BaseDto { protected $firstName; protected $middleName; protected $lastName; public function __construct($firstName, $middleName, $lastName) { $this->firstName = $firstName; $this->middleName= $middleName; $this->lastName= $lastName;
Сергей
вот пример
Dmitriy
вызывать магией ?
Сергей
да, чтобы свойства не были доступны для записи
Dmitriy
если мы хотим добавить не обязательное поле ?
Сергей
то есть дто создаётся и всё, больше с ним ничего нельзя сделать
Сергей
в конструкторе поле по-умолчанию
Dmitriy
а что делать не поумолчанию с полями ?
Сергей
ой, код не весь вставился
Сергей
А как в телеграме выделить код, но без помощи @bold ?
Сергей
Выше ты делал :)
Dmitriy
`
Сергей
`class NameDto extends BaseDto { protected $firstName; protected $middleName; protected $lastName; public function __construct($firstName, $middleName, $lastName) { $this->firstName = $firstName; $this->middleName= $middleName; $this->lastName= $lastName; } } $name = NameDto::make('Пётр', 'Иванович', 'Сидоров'); echo $name->firstName; echo $name->middleName; echo $name->lastName;`
Dmitriy
статические методы такое себе =(.
SarcasmIO
``
Dmitriy
мне нравится такой подход https://dzone.com/articles/practical-php/practical-php-patterns-data
Dmitriy
мне нравится такой подход https://dzone.com/articles/practical-php/practical-php-patterns-data
ну или такой https://github.com/maxpou/design-pattern-php/blob/master/DP/DTO/Example/src/DTO/BeerDTO.php
Сергей
class NameDto extends BaseDto { protected $firstName; protected $middleName; protected $lastName; protected $userName; public function __construct($firstName, $middleName, $lastName, $userName = '') { $this->firstName = $firstName; $this->middleName = $middleName; $this->lastName = $lastName; $this->userName = $userName; } } $name = NameDto::make('Пётр', 'Иванович', 'Сидоров'); echo $name->firstName; echo $name->middleName; echo $name->lastName; echo $name->userName;
Сергей
Вот пример с необязательными полями
Сергей
А где там статические переменные?
Сергей
Там только функция make и className
Dmitriy
ой методы
Сергей
А чем плохо?
Сергей
Dmitriy
Но в моём случае проще ведь, кода меньше
Вроде ддд хотите . и хотите кода меньше ?
Сергей
хочу в классах не дублировать код :)
Сергей
В случаях, когда DTO для сущности - можно передавать сущность
Dmitriy
А чем плохо?
в тестах https://stackoverflow.com/questions/752758/is-using-a-lot-of-static-methods-a-bad-thing
Сергей
больше 4 агруметов это рак. а таким способом это так и будет. $name = new Name($lastName,$firsName); $name->setUserName($username);
class EmployeeNameDto extends BaseDto { protected $firstName; protected $middleName; protected $lastName; public function __construct(Employee $employee) { $this->firstName = $employee->firstName; $this->middleName = $employee->middleName; $this->lastName = $employee->lastName; } } когда на основе сущности, то вот так делать можно :) Ну а для ДТО, где много данных для конструктора - можно сделать и обычный с public-методами
Сергей
в тестах https://stackoverflow.com/questions/752758/is-using-a-lot-of-static-methods-a-bad-thing
К сожалению, тестами не занимался :( Понял, что плохо, но почему не понял))
Сергей
но в данном случае вся прелесть в функции make, но это плюшка и можно использовать new Class()
Nikita
я новичек подскажите как сделать(образно), у модели есть связь к таблице return $this->hasMany(Properties::className(), ['id' => 'properties_id'])->viaTable('{{%catalog_objects_properties}}', ['catalog_objects_id' => 'id']); как сделать редактирование через форму через checkbox не могу понять
Витебск 01
Почему данная запись не работает? $this->layout('buy');
Юрий
потому что
Сергей
Наверное ошибка
Юрий
наверное полное отсутствие вводных
Konstantin
тю
Юрий
что там за метод и метод ли вообще
Konstantin
ну наверное ж потому что нет такого метода
Konstantin
$this->layout = 'buy'?
Сергей
http://stuff.cebe.cc/yii2docs-ru/guide-structure-views.html#using-layouts
Витебск 01
SiteController::layout() does not exist
Сергей
прочитай документацию
Сергей
ссылка выше
Konstantin
ага