2015-02-01 8 views
2

У меня есть форма для заполнения, которые работают fine.Until недавно пользователь жаловался повторяющихся значений, сохраненный в database.Table Lts связан с TABLE2 Koleks в одном для многих отношенийПредотвратить дублировать значение в базе данных в Учении 1,2

действие

public function executeKolect(sfWebRequest $r){ 
    $areaId = //code; 
    $this->lts = Doctrine_Core::getTable('Lts')->getPaid($areaId, $this->selectedLot); 
if($r->isMethod('post')) { 
//code 
} 
foreach($this->lts as $l) { 
      $amount = $r->getParameter('amount_received_'.$l['id']); 
      $dateOfPayment = $r->getParameter('date_of_payment_'.$l['id'], date('Y-m-d')); 
      $startPayment = $l['date_start_of_payment'];//date_of_payment should not less than date_start_of_payment 
      $collectionsTable = Doctrine_Core::getTable('Koleks')->getDateCreate($l['id'],$dateOfPayment); 
//here i want to make a method to check if the date_of_payment value that i want to insert does not exist yet in the Koleks table related to Lts table 
$koleksTable = Doctrine_Core::getTable('Koleks')->getDateCreate($l['id'],$dateOfPayment); 
if ($koleksTable >0) { 
       $this->fieldErrors['date_of_payment_'.$l['id']] = 'exist'; 
      } 
else { 
    //code ..proceed 

}}

сейчас в доктриной таблице

public function getDateCreate($loanId,$datePayment) { 
    $q = $this->createQuery('k') 
       //->select('k.date_created') 
       // ->from('Koleks k') 
       ->innerJoin('k.Lts l') 
       ->where('k.l_id=?',$loanId) 
       ->andWhere('k.date_created=?',$datePayment); 
       //return $q->count(); 
       $dateCreate = $q->count(); 
       if ($dateCreate == 1) { 
        $res = $q->fetchAll(); 
        return $res; 
       } 
       else { 
       return $dateCreate; 
       } 
} 

Я хочу вернуть ошибку, если же «DATE_CREATED» значение уже существует в таблице Koleks

Но этот код не будет работать ..

В моем предыдущем проекте, используя MySQLi, я могу легко " избежать»дубликатов, используя этот код

// Действие

$collectionsTable=$link->getdateCreated($date,$id) 
if $collectionsTable > 0 { 
echo "cant proceed" 
} 
else { 
//code to proceed 
} 

// в myclass.php

$date = _POST// 
function getDateCreate($date) { 
    $query = $this->link->query("SELECT date_created FROM Koleks WHERE date_created = '$date'"); 
    $rowcount = $query->rowCount(); 

    if($rowcount == 1) 
    { 
     $result = $query->fetchAll(); 
     return $result; 
    } 
    else 
    { 
     return $rowcount; 
    } 
} 

ответ

0

Я думаю, что ваш код в Доктрине таблице должно быть (двойной проверки псевдонимами)

public function getDateCreate($loanId,$datePayment) { 
    $q = $this->createQuery('k') 
       ->innerJoin('k.Lts l') 
       ->andWhere('k.l_id = ?',$loanId) 
       ->andWhere('k.date_created = ?',$datePayment); 
return $q; 
} 

и в своем действии

//[...]    
$koleksTable = Doctrine_Core::getTable('Koleks')->getDateCreate($l['id'],$dateOfPayment);//GET THE QUERY 
$koleksTable->execute(); //EXECUTE THE QUERY 
if ($koleksTable->count() >0) { 
    $this->fieldErrors['date_of_payment_'.$l['id']] = 'exists'; 
} 
else 
{ 
    //code ..proceed 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^