我想从外部源保存一些数据,这些数据除了数据本身之外没有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?
希望这足够冗长。
由于
答案 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
}