Это скорее вопрос подхода/лучшей практики, чем конкретный технический вопрос, поэтому я прихожу к вам за небольшим руководством.Формы ZF2 - вставка и обновление форм
Мой вопрос окружает формы Zend Framework 2, и особенно, если я должен внедрять другую форму для вставки объектов и обновления объектов.
Описать упрощенный вариант использования. Предположим, у меня есть таблица продуктов в моей базе данных. Каждый продукт имеет идентификатор (product_id
), который является первичным ключом и именем (name
). Скажем, продукты, которые я храню, поступают от поставщика, который предоставляет мне уникальный идентификатор продукта, который я хочу использовать для моего первичного ключа в базе данных.
Теперь предположим, что я реализовал product_fieldset
и product_form
, оба из которых работают красиво. Форма позволяет мне указать идентификатор продукта и имя и сохранить его в базе данных. Однако, когда пользователь использует форму для обновления имени продукта, вместо того, чтобы вставлять новый продукт, я не хочу, чтобы они могли редактировать идентификатор продукта, поскольку это первичный ключ моей базы данных.
В настоящее время я могу видеть, как я мог бы представить форму в сценарии обновления с одним меньшим полем (идентификатор продукта), реализовав 2 формы и 2 набора полей.
Как вы подходите к этому? При использовании диспетчера служб/менеджера форм, чтобы отменить мои формы, я не могу понять, как/где, или даже если я должен реализовать логику в форме для решения таких ситуаций.
: WQ
Спасибо, Юриан, и да, я согласен, первичный ключ должен храниться для управления базой данных. Единственная причина, по которой я пытался использовать SKU в этом случае, состоит в том, что мои модели (и их тысячи) регулярно обновляются из фида XML. Имея SKU в качестве первичного ключа, я мог бы использовать функцию MySql 'ON DUPLICATE KEY UPDATE', чтобы очень быстро обновлять базу данных из фида тысяч элементов, где SKU является уникальным идентификатором. Без этого для каждого элемента мне сначала нужно будет найти базу данных, чтобы узнать, существует ли она и принять решение обновить в соответствии с результатом. – familymangreg
Вы можете использовать запрос 'INSERT IGNORE' или использовать' INSERT [...] WHERE NOT EXISTS' в противном случае. Для первого (все ошибки в вставке будут пропущены, помните об этом!) у вас просто есть уникальное ограничение на SKU, а затем вставьте все данные из вашего фида. Хотя, это другая тема и не связана с проблемой ZF2 выше. Поиск по этой теме, есть много вопросов об этом :) –