Как я отсоединяю поведение в Symfony/Doctrine?

В FileZilla 2.2.32 пойдите Редактирование > Настройки > настройки Передачи файлов > ASCII/двоичный файл. Установите его на всегда двоичный файл: это должно добиться цели.

В FileZilla 3.5.0 установка находится в Редактировании> Настройки> Передачи> Типы файлов> тип передачи По умолчанию> Двоичный файл.

6
задан benlumley 1 February 2010 в 23:14
поделиться

5 ответов

Подумайте, что я пойду на путь Zed, но для полноты:

Метод прослушивателя событий для удаления (и выбора) для мягкого удаления поведения содержит:

if ( ! $query->contains($field)) {
   // do the magic stuff to covert the query to respect softdelete
}

Это означает, что если вы явно упомянуете поле в Запрос, это не примет преобразование в запрос.

Итак, если вы сделаете:

$q = Doctrine_Query::create()
->delete('Table t')
->where('t.id = ? AND t.deleted != 2 ', 1);

Это не применит мягкие материалы удаления и фактически удаляют запись. Обратите внимание, что вы можете сделать что-нибудь с T.Deleted, я только что сделал что-то, что всегда будет правдой. Псевдоним («т») тоже важно для этого.

Этот трюк работает для выбора тоже, где я обычно использовал его раньше.

Как я говорю, хотя, я думаю, что его приятнее сделать:

$old_dqlc = Doctrine_Manager::getInstance()->getAttribute(Doctrine::ATTR_USE_DQL_CALLBACKS);
Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_USE_DQL_CALLBACKS, false);
$record->delete();
Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_USE_DQL_CALLBACKS, $old_dqlc);

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

10
ответ дан 8 December 2019 в 03:01
поделиться

Попробуйте вызвать это, он должен отключить обработку поведения.

$manager->setAttribute(Doctrine::ATTR_USE_DQL_CALLBACKS, false);

В качестве грязного способа вы можете сгенерировать запрос SQL, который удаляет запись из таблицы.

1
ответ дан 8 December 2019 в 03:01
поделиться

текст ссылки Я бы подумал, что эта функция и установка для обратных вызовов use dql значения false, как и в диспетчере, должны помочь :).

1
ответ дан 8 December 2019 в 03:01
поделиться

гм... поведение SoftDelete включает гораздо более приятный способ сделать это... просто вызовите

$record->hardDelete();
13
ответ дан 8 December 2019 в 03:01
поделиться

Хотел согласиться с Джошуа Коуди, что лучше всего будет использовать

$record->hardDelete()

Однако я также хотел добавить сюда, поскольку это один из первых результатов в Google для отсоединения поведения в доктрине, что самый простой способ отсоединить поведение для «выбирает» - это просто включить «удаленный_ат» (или то, что вы назвали свое поле, как в запросе. Слушатель смотрит, включено ли оно, и если да не фильтрует удаленные записи.

Doctrine_Core::getTable('Record')->createQuery()->select('id, etc1, etc2')->addSelect('deleted_at')->execute();

вернет удаленные записи.

1
ответ дан 8 December 2019 в 03:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: