2013-04-19 5 views
0

Я хочу сохранить некоторые данные из внешнего источника, который не имеет идентификатора, кроме самих данных (например, красный, используемый, Volvo и т. Д. Из ebay api).Как проверить, существует ли уникальное значение в db в cakephp

Так я настроил мои таблицы следующим образом:

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 

Таким образом, в 2 этапа я мог проверьте наличие каких-либо данных в любой таблице, а затем вставьте их, если они не существуют. Но мой вопрос: могу ли я сделать это в 1 этап? То есть есть ли код для проверки наличия данных и вставки его, если нет, и в любом случае вернуть идентификатор?

Надеюсь, что это достаточно много.

Благодаря

ответ

1

Если под «кодом» вы имеете в виду один оператор MySQL, я не думаю, что есть. Или, по крайней мере, я не думаю, что без чрезмерно сложного запроса с несколькими запросами.

Просто сделать alreadyExists() метод (или что-то) и проверить перед вставкой - что-то вроде:

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

Как и с ответом Марка, у меня есть +1, поскольку это то, что я уже думал, но поскольку это не тот ответ, я не могу его пометить. – khany

+0

Я считаю, что это ответ, к сожалению - ответ заключается в том, что не стоит использовать MySQL-запрос, который будет делать то, что вы хотите. – Dave

+0

Под «кодом» я имел в виду код CakePHP, как указано в названии, например встроенную функцию. – khany

0

Я обычно использую метод, как прикосновение() для этого, что делает всю магию внутри.

// 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 
} 
+0

У меня есть +1 это, как я уже думал, но как его не ответ, я не могу отметить его – khany

+0

Что существует в вашем коде? –

+0

Основная находка (счет) и т. Д., Например – mark