如何检查cakephp中db是否存在唯一值

时间:2013-04-19 15:21:43

标签: cakephp

我想从外部源保存一些数据,这些数据除了数据本身之外没有id(例如,来自ebay api的Red,Used,Volvo等)。

所以我设置了我的表:

aspectHeaders
id INT AUTO_INCREMENT PRIMARY KEY
name varchar(30)
UNIQUE KEY `NAME`(`name`)

aspects
id INT AUTO_INCREMENT PRIMARY KEY
name varchar(30)
aspectHeader_id INT
UNIQUE KEY `DETAIL` (`aspectHeader_id`,`name`)

aspectHeaders将包含:

7 Manufacturer

和方面将包含:

1 Volvo 7

因此,在两个阶段中,我可以检查两个表中是否存在任何给定数据,然后如果它不存在则插入它。但我的问题是,我可以在一个阶段做到吗?也就是说,是否存在检查数据是否存在的代码,如果没有,则插入它并以任何方式返回id?

希望这足够冗长。

由于

2 个答案:

答案 0 :(得分:1)

如果用“代码”表示单个MySQL语句,我认为没有。或者至少我认为没有制作过于复杂的多查询查询。

只需制作一个alreadyExists()方法(或其他东西)并在插入前检查 - 例如:

if(!$this->MyModel->alreadyExists($data)) {
    //do insert here
}

答案 1 :(得分:1)

我通常使用像touch()这样的方法,在内部完成所有魔法。

// always returns id (or false on failure)
public function touch($data) {
    // check if it already exists
    if (exists) {
         // return id and do nothing
    }
    // create() and save()
    // return id or false if invalid data
}