Есть ли краткий способ сохранить новую запись базы данных в Yii2 ActiveRecord?
Есть ли сокращенный способ сохранить новую запись при использовании Yii2 ActiveRecord?
Вот несколько примеров из документов:
$customer = new Customer();
$customer->name = 'Qiang';
$customer->save();
а также...
Yii::$app->db->createCommand()->insert('customer', ['name' => 'Sam'])->execute();
Было бы замечательно, если бы существовал такой сокращенный метод, как...
Customer::create(['name' => 'Qiang']);
... но я не могу найти это в документах. Интересно, если я что-то упустил. Или мне нужно создать свой собственный класс ActiveRecord?
2 ответа
Какой-то уродливый способ делать вещи
(new Customer(['name' => 'Qiang',]))->save();
Если вам нужно вернуть модель
($customer = new Customer(['name' => 'Qiang',]))->save();
".. Или мне нужно создать свой собственный класс ActiveRecord?"
Будет хорошим решением для вашего случая, однако каждый раз, когда вы генерируете модель из Gii, вам не нужно забывать менять родительский класс
Создание записи на самом деле сложнее в реальном мире, потому что save()
не гарантирует, что запись была сохранена в базе данных. Например, проверка может не пройти, запись не будет сохранена, и save()
вернуть false
, В зависимости от ситуации вы можете вызвать исключение в этом случае или нет.
Я предлагаю создать фабричный класс и инкапсулировать все необходимые условия, обработку исключений или значения по умолчанию - в долгосрочной перспективе это будет легче поддерживать.
$customer = Yii::$app->modelFactory->createCustomer(['name' => 'Qiang']);