Propel: Как определяется «Затронутые строки», возвращаемые из doUpdate - PullRequest
1 голос
/ 03 августа 2009

В propel есть функция doUpdate , которая будет возвращать количество затронутых строк по этому запросу.

Вопрос в том, что если нет необходимости обновлять строку (поскольку значение set уже совпадает со значением поля), будут ли эти строки считаться соответствующей строкой?

Взять, к примеру, следующую таблицу:

ID | Name  | Books
1  | S1oon | Me
2  | S1oon | Me

Давайте предположим, что я пишу функцию ORM, эквивалентную следующему запросу:

update `new table` set
Books='Me'
where Name='S1oon';

Что вернет результат doUpdate? Будет ли он возвращать 0 (поскольку все столбцы Books уже Me, следовательно, нет необходимости обновлять), или будет 2 (потому что есть 2 строки, которые удовлетворяют условию where)?

Ответы [ 2 ]

2 голосов
/ 24 сентября 2009

Под капотом Propel использует метод PDO PDOStatement :: rowCount () , чтобы вернуть количество затронутых строк. Таким образом, короткий ответ заключается в том, что вы получите «2», как вы ожидаете, но более длинный ответ заключается в том, что это может немного зависеть от того, как PDO реализует эту функцию для вашей конкретной базы данных. (Я думаю, что если вы не получили 2, это должно быть ошибкой для PDO.)

См. описание rowCount () в руководстве по PHP для получения дополнительной информации.

Еще одна вещь, которую нужно иметь в виду, заключается в том, что когда Propel вызывает методы (например, save () или delete () ), которые, как ожидается, будут возвращать количество строк, измененных и это может привести к изменению более чем одной строки (например, если вы добавите Книгу и ее Автора, а затем заставите их ВСТАВИТЬ, вызвав book-> save () ), вы получите всего количество измененных строк.

0 голосов
/ 03 августа 2009

Вернется 2.

...