Сохранение отношений таблицы с помощью Datamapper ORM - PullRequest
1 голос
/ 09 ноября 2011

Я новичок в объектном сопоставлении моделей и только что прочитал документацию CodeIgniter DataMapper.Я попробовал примеры, и я весьма впечатлен тем, как мало времени можно достичь.

Но мне кажется, что не удалось решить одну проблему:

Допустим, у меня есть две таблицы: клиент и адрес.У клиента может быть много адресов, но я адрес только одного клиента.

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

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

В настоящий момент возможно, что клиент вводит правильные данные для таблицы клиентов, которая проверяется и сохраняетсяв БД, но адресные данные не проверяются и не сохраняются.

Короче говоря: я хочу сохранить данные любой таблицы в БД, только если данные для всех таблиц проверены, иначе я хочу получить сообщения об ошибках.

Спасибо за любую помощь заранее.

Ответы [ 3 ]

0 голосов
/ 09 ноября 2011

Непонятно из документации , но вы можете вызвать метод validate() до вызова save():

 public function test()
 {
     // Customers require an email address
     $cust = new Customer();
     $cust->first_name = "Me";
     $cust->validate();
     if ($cust->error->string)
     {
         echo $cust->error->string;
         // outputs The Email Address field is required.
     }
     else
     {
         // validation passed, save customer and related address to db
         $cust->save(array($address));
     }
 }
0 голосов
/ 24 декабря 2011

Если у вас определены правила проверки, вам не нужно явно вызывать validate (), правила проверки также будут проверяться при вызове save ().

В случае сбоя проверки save ()вернет FALSE, после чего вы можете проверить $ this-> valid, чтобы убедиться, что ошибка проверки вызвала сбой сохранения.

0 голосов
/ 09 ноября 2011

Первый способ - использовать транзакции , второй - проверить как адрес, так и данные клиента, а если оба действительны - сохранить.

...