У меня есть форма заполнения, которая работает нормально. До недавнего времени пользователь жаловался на дублирующиеся значения, сохраняемые в базе данных. Таблица Lts связана с table2 Koleks в отношении один ко многим
действие
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;
}
}
Я думаю, что ваш код в таблице доктрин должен быть (дважды проверьте псевдонимы)
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
}
Других решений пока нет …