.: HosiriS :.

Informatica e non solo

Controlliamo l’esistenza di dati prima di eseguire una query

Posted by hosiris su settembre 26, 2011

Quando si inseriscono dei dati in un db sfruttando le azioni di CakePHP spesso può capitare che vengano inserite delle tuple duplicate. Non ci resta che inserire una funzione che prima dell’esecuzione della query controlli se non sia già esistente.

Creaiamo un file di nome app_model.php sulla root del progetto ed inseriamo il seguente codice:


//app/app_model.php
<?php 
class AppModel extends Model
{
    function isUnique($params, $id="")
    {
        if (!is_array($params)) {
            trigger_error(__METHOD__ . ' - $params must be an array', E_USER_ERROR);
        }
        
        $query = array();
        $this->recursive = -1;
        
        foreach ($params as $field => $value)
        {
            $query[$this->name . '.' . $field] = $value;
        }

        if (empty($id))
            $fields[$this->name.'.id'] = "!= NULL"; 
        else
            $fields[$this->name.'.id'] = "!= {$id}";
            
        if ($this->hasAny($query)) {
            return false;
        }
        else 
            return true;            
    }    
}
?> 

Adesso non rimane che inserire il controllo di unicità all’interno del model che ci interessa:


<?php 
    function beforeValidate()
    {
        $unique_check = array(
                'field1' => $this->data[$this->name]["first"],
                'field2' => $this->data[$this->name]["last"]
        );

        if (!$this->isUnique($unique_check))
            $this->invalidate('unique');
    }
?> 

Da adesso ogni volta che si cercherà di effettuare una azione di add e nel db sarà già presente quella tupla, la query non verrà eseguita.

Fonte: Bakery

Una Risposta to “Controlliamo l’esistenza di dati prima di eseguire una query”

  1. blackout said

    nice!

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger cliccano Mi Piace per questo: