/**
  * doDelete
  *
  * @param array $conditions
  *
  * @throws \Exception
  * @return  mixed
  */
 protected function doDelete(array $conditions)
 {
     $dataset = $this->find($conditions);
     $this->db->transactionStart(true);
     try {
         // Loop each data.
         foreach ($dataset as &$data) {
             // Loop the relation mapper.
             foreach ($this->relations as $field => $relation) {
                 // Prepare sub conditions
                 $subConditions = array();
                 // Find relation data to this field.
                 foreach ($relation['relations'] as $left => $right) {
                     $subConditions[$right] = $data->{$left};
                 }
                 $relation['table']->delete($subConditions);
             }
             parent::doDelete($conditions);
         }
     } catch (\Exception $e) {
         $this->db->transactionRollback(true);
         throw $e;
     }
     $this->db->transactionCommit(true);
     return true;
 }