Another option is to override Model->exists()
in your models. This is actually the same as Cake does it, but extended to other keys not only primaryKey.
/**
* Overrides Model->exists() method so we can check for uniqueness if primary key is not set
*
* If a record already exists, sets the primary key of that record to do an update
*
* @param int $id
* @return bool True if the record exists, false otherwise
*/
public function exists($id = null)
{
if (empty($id) && !$this->getID() && isset($this->data[$this->alias]) && is_array($this->data[$this->alias])) {
// given $id and primary key are empty, try with data
$exists = $this->find('first', array(
'fields' => array($this->primaryKey),
'conditions' => array(
'key1'=>$this->data[$this->alias]['key1'],
'key2'=>$this->data[$this->alias]['key2'],
),
'recursive' => -1,
'callbacks' => false,
));
if ($exists) {
$this->set($this->primaryKey, $exists[$this->alias][$this->primaryKey]);
return true;
}
}
return parent::exists($id);
}
$this->Model->query($mySQL)
– Fledgy