cakephp 对于 2 个字段是唯一的? [英] cakephp isUnique for 2 fields?
问题描述
我有一个注册表单,用户可以在其中填写两个电子邮件地址(email1 和 email2).市场营销的要求是它们必须是唯一的(如果我们有 10 个用户,那么就会有 10*2=20 个唯一的电子邮件地址).
I have a registration form in which users can fill in two email address (email1 & email2). Marketing's requirement is that they need to be unique (unique as in if we had 10 users, then there would be 10*2=20 unique email address).
该系统已经建立在 cakephp 上,所以我想知道的是,是否有类似于 isUnique 功能(在一个领域中是独一无二的)的东西可以立即执行此操作?还是我注定要自己编写代码?提前致谢.
The system is already built on cakephp, so what I'd like to know is, is there something similar to the isUnique feature (unique in one field) that can do this right out of the box? Or am I doomed to code this myself? Thanks in advance.
建立在理查德的例子上,这对我有用:
built on Richard's example, this worked for me:
function checkUnique($data, $fields) {
if (!is_array($fields)) {
$fields = array($fields);
}
foreach($data as $key) {
$checks = $key;
}
if (empty($checks)) {
return true; //allow null
}
foreach($fields as $key) {
$tmp[$key] = $checks;
}
if (isset($this->data[$this->name][$this->primaryKey])) {
$tmp[$this->primaryKey] = "<>".$this->data[$this->name][$this->primaryKey];
}
return $this->isUnique($tmp);
}
推荐答案
我在 CakePHP Google Group 上发布了一个解决方案:
I posted a solution to this on the CakePHP Google Group:
将以下内容添加到您的 AppModel:
Add the following to your AppModel:
/**
* checks is the field value is unqiue in the table
* note: we are overriding the default cakephp isUnique test as the
original appears to be broken
*
* @param string $data Unused ($this->data is used instead)
* @param mnixed $fields field name (or array of field names) to
validate
* @return boolean true if combination of fields is unique
*/
function checkUnique($data, $fields) {
if (!is_array($fields)) {
$fields = array($fields);
}
foreach($fields as $key) {
$tmp[$key] = $this->data[$this->name][$key];
}
if (isset($this->data[$this->name][$this->primaryKey])) {
$tmp[$this->primaryKey] = "<>".$this->data[$this->name][$this-
>primaryKey];
}
return $this->isUnique($tmp, false);
}
}
并用于您的模型验证:
var $validate = array(
"name"=>array(
"unique"=>array(
"rule"=>array("checkUnique", array("name", "institution_id")),
"message"=>"A contact with that name already exists for that
institution"
)
)
);
这篇关于cakephp 对于 2 个字段是唯一的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!