Как соединить работу двух методов? Есть класс Customer
Метод create() создает запись о клиенте
Метод createContact() создает запись в таблице контактов. Контактов может быть несколько у одного клиента.
Тк запись добавляется из сразу и для первой и для второй таблицы (один контакт точно нужно сохранить, причем одним действием), то непонятно, как это реализовать в контроллере.
Единственное что пришло в голову, сделать так:if(isset($_POST['create'])){
try{
$last_id = $customer->create($_POST); //метод возвращает новый номер записи
if(!empty($last_id)){
$customer->createContact($last_id, $_POST); //передаем его в метод добавления контакта
}
}catch(AppException $e){

}
}
Может быть есть иные способы?
PS. пробовал также добавлять createContact внутрь create, внутри класса

21 Авг 2019 в 06:58
174 +1
0
Ответы
1

Ваш подход к соединению работы двух методов в контроллере выглядит вполне разумно. Если метод create() возвращает ID новой записи о клиенте, и этот ID нужен для создания записи в таблице контактов, то передача этого ID из метода create() в метод createContact() является правильным решением.

Если вы хотите улучшить структуру вашего кода, можете рассмотреть возможность использования транзакций для обеспечения атомарности операций добавления клиента и контакта. Таким образом, вы сможете гарантировать целостность данных в случае возникновения ошибки при выполнении любого из запросов.

Пример использования транзакции для вашей задачи:

if(isset($_POST['create'])){
try{
$db->beginTransaction();
$last_id = $customer->create($_POST); //метод возвращает новый номер записи
if(!empty($last_id)){
$customer->createContact($last_id, $_POST); //передаем его в метод добавления контакта
}
$db->commit();
}catch(AppException $e){
$db->rollBack();
// обработка ошибки
}
}

Здесь $db представляет объект для работы с базой данных, который поддерживает транзакции. Вы начинаете транзакцию методом beginTransaction(), а затем либо коммитите изменения методом commit(), либо откатываете их методом rollBack() в зависимости от результата выполнения операций.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир