Alternatively (and better because reusable in other Models), you could
insert the function _isUnique (documented below) in your own
app_model.php and use the following code in your Model.
Second argument in the 'rule' array is the field that has to be
checked for uniqueness..


var $validate = array(
        'login' => array(
            'rule' => array('_isUnique', 'login'),
            'message' => 'Login name already taken.'
        )
    );



---------------Insert in app_model.php---------

function _isUnique($check, $field) {
                if(isset($this->data[$this->name]['id']))
                {
                        //make sure that there isn't one on another id that is 
same as this
field
                        $results = 
$this->find($this->name.'.id<>"'.addslashes($this-
>data[$this->name]['id']).'" AND '.$this->name.'.'.
$field.'="'.addslashes($check).'"');
                } else {
                        //make sure it doesn't currently exist in the db (we're 
creating a
new one)
                        $results = $this->find($this->name.'.'.
$field.'="'.addslashes($check).'"');
                }
                if(!empty($results))
                {
                        return false;
                } else {
                        return true;
                }
        }

On Nov 29, 6:15 pm, francky06l <[EMAIL PROTECTED]> wrote:
> Take care when using with edit. Indeed you can edit your data, not
> modifying the field but the field will exist in the DB (the current
> record)...
>
> On Nov 29, 7:54 pm, José Pablo Orozco Marín <[EMAIL PROTECTED]>
> wrote:
>
> > Maybe this help:http://tempdocs.cakephp.org/#TOC121845
>
> > <?php
> > class User extends AppModel
> > {
> >     var $name = 'User';
>
> >     var $validate = array(
> >         'login' => array(
> >             'rule' => array('checkUnique'),
> >             'message' => 'Login name already taken.'
> >         )
> >     );
>
> >     function checkUnique($data)
> >     {
> >         $valid = false;
> >         if(isset($fieldName) && $this->hasField($fieldName))
> >         {
> >             $valid = $this->isUnique(array($fieldName => $value));
> >         }
> >         return $valid;
> >    }}
>
> > ?>
>
> > sMAshdot escribió:
>
> > > On 29 Nov., 13:40, RichardAtHome <[EMAIL PROTECTED]> wrote:
>
> > >> As a side note, I suspect isUnique might not meant to be referenced in
> > >> a rule and is meant to be referenced in the controller. If this is
> > >> true can someone point me towards some examples of how / where it
> > >> should be used?
>
> > > I'm quite new to CakePHP as well, but I check for uniqueness after
> > > validating
> > > the data.
>
> > > This example comes from the IBM CakePHP tutorials
> > >http://www.ibm.com/developerworks/views/opensource/libraryview.jsp?se...
>
> > > if ( $this->User->validates($this->data) )
> > > {
> > >   if ( $this->User->findByname($this->data['User']['name']) )
> > >   {
> > >     $this->User->invalidate('name');
> > >     $this->set('name_error', 'User already exists.');
> > >   }
> > > }
>
> > --
>
> > -----------------------------------------
>
> > José Pablo Orozco Marín
> > [EMAIL PROTECTED]
>
> > Tel. +506 820-7280
>
> > Por favor, visite mi pasión:http://www.SukiaLogic.com/

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake 
PHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to