Я использую CakePHP 1.3, и я вставляю новые записи (несколько тысяч) в цикл, если он является новым или обновляет существующие записи, если они уже существуют. Но способ, которым я сохраняю, не проверяет, существует ли уже запись; вместо этого я назначаю значение первичного ключа в каждой из записей. Этот идентификатор, который я назначаю, гарантированно будет уникальным. CakePHP, похоже, знает, что нужно вставить, если этот идентификатор не существует и обновляется в противном случае.CakePHP 1.3: правильный способ вставки или обновления записей
Однако я не уверен, что я делаю это правильно. Я читаю here, если я создаю новую запись в цикле, мне нужно сделать $this->create()
, который я реализую в других функциях, где я знаю, что каждая запись будет уникальной. Я не делаю этого здесь, потому что он, кажется, работает без ошибок, и мне не нужно тогда проверять наличие каждого из записей.
Каждый из массива записей, который я вставляю или обновляю, имеет ключ id
, который указывает первичный ключ в соответствующих таблицах, и каждый массив содержит данные для двух соответствующих моделей.
например.
$this->saveAll($myData);
Array
(
[MyModel] => Array
(
[id] => 123
[xyz] => ...
...
)
[MySecondModel] => Array
(
[id] => 789
[my_model_id] => 123
[qwe] => ...
...
)
)
Это то, что я делаю хорошо, или мне нужно сделать, чтобы проверить наличие последующей $this->create()
, в случае необходимости?
Не могли бы вы подробнее рассказать о части «проливных данных»? Мои массивы данных не обязательно имеют все указанные столбцы. Может быть, пример? – musicliftsme
Под «проливными данными» я имею в виду следующее: предположим, что вы обновили запись со значением «foo» для столбца «bar». В следующем цикле вы создаете новую запись, но не вызываете create() или не устанавливаете «bar»; в этом случае ваша новая запись также будет иметь «foo» в этом столбце. Что-то вы, возможно, не захотите. Поэтому рекомендуется каждый раз создавать create(). – JvO