2012-01-24 2 views
1

У меня есть источник данных, который имеет кучу функций вставки. Каждая функция принимает список элементов, которые необходимо вставить в БД. Каждый из этих элементов может быть успешно вставлен или нет. Если они не были успешно вставлены, я хотел бы знать причину.Что нужно вернуть из вызова вставки базы данных?

Есть ли лучшие методы в отношении того, что должно быть возвращено из функции вставки источника данных?

Первых мысли:

Логического успех: Не дают мне никаких причин, по срыву

Пользовательского Объект ответа с булевым успехом и Струнной Причиной: Не удается обработать> 1 ответ вставить

Список пользовательских объектов ответа: Кажется, нужно делать то, что я хочу ...

ответ

2

Если бы это был я, я бы установил свой API для исключения исключений, если строка не была вставлена ​​правильно.

бы выглядеть примерно так (демонстративная только):

$dbo = new Database(); 

foreach ($items as $item) { 

    try { 
     $dbo->insert($item); 

     Log::toLogfile('Row was successfully inserted'); 

    } catch (Exception $e) { 

     // If an exception failed upon insert, I can log the message and move on 
     error_log($e->getMessage()); 
    } 
} 

class Database 
{ 
    public function insert(array $item) { 

     // Here you can add any number of validators 
     if (empty($item)) { 
      throw new Exception(sprintf('Invalid $item array (%s)', serialize($item)); 
     } 

     elseif (!array_key_exists('id', $item)) { 
      throw new Exception(sprintf('Invalid $item[id] (%s)', serialize(item)); 
     } 

     // Making a call to php function which returns bool 
     // No problem, we test for return value and throw exception accordingly 
     if (!$this->dbo->insert($item)) { 
      throw new Exception(sprintf('Row was not inserted (%s)', serialize($item)); 
     } 

     // If we made it this far, we have successfully inserted a row 
     // And code resumes back up after call to this function was made 
    } 

бросание исключения это лучший способ, чтобы получить сообщение обратно в вызывающий код, и это вынуждает вызывающий код для обработки исключения. Обернув наш вызов $dbo->insert($item) внутри блока try/catch, мы можем поймать исключение, занести его в журнал и перейти к следующему элементу массива.

0

Я бы вернул что-то вроде # успешных вставок и либо выбросил исключение, когда кто-то ошибся, либо выдаст предупреждение, либо, по крайней мере, зарегистрирует его в файле, в зависимости от ваших потребностей.