У меня была эта проблема с отношением «Один ко многим, однонаправленный с таблицей соединения» , как ( см. Doctrine Doc ). Я не нашел такого случая ошибки с этим типом отношения через Интернет или через стековый поток, поэтому я выкладываю здесь свое решение, чтобы позволить другим помочь с той же проблемой.
Что вызвало эту проблему:
/**
* @ORM\ManyToMany(targetEntity="Category")
* @ORM\JoinTable(name="category_child",
* joinColumns={@JoinColumn(name="category_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="category_child_id", referencedColumnName="id")}
* )
*/
public $children;
@ORM\JoinTable(name="category_child"
вызвало, что доктрина хочет создать эту таблицу снова. Один раз из-за уже существующего объекта Category_Child, а затем выражения @ORM\JoinTable
, которое указывает на ту же таблицу. Решение состояло в том, чтобы удалить сущность Category_Child, которая была создана из реверс-инжиниринга. Если вы использовали сущность Category_Child в некоторых запросах $ em, вы должны выбрать эти данные в обратном направлении. Например. Через родителя, который хранит эти дочерние данные в ArrayCollection, или через DBAL.
Отказ от ответственности Я яростный сторонник использования правильного парсера (вместо регулярного выражения) для синтаксического анализа HTML. Однако этот вопрос не о синтаксическом анализе HTML, а о уничтожении его. Для всех задач, выходящих за рамки этого, используйте синтаксический анализатор.
Я думаю, ваше регулярное выражение хорошее. Пока нет ничего, кроме удаления всех HTML-тегов из ввода, использование регулярного выражения, подобного вашему, безопасно.
Все остальное, вероятно, доставит больше хлопот, чем оно того стоит, но вы можете написать небольшой функция, которая перебирает строку char-by-char один раз и удаляет все, что ' s в скобках тега - например:
<
», >
"Для части вашего приложения с высокими требованиями это может быть быстрее, чем регулярное выражение. Но регулярное выражение чистое и, вероятно, достаточно быстрое.
Возможно, это модифицированное регулярное выражение имеет для вас некоторые преимущества:
<[^>]*(?:>|$)
Для части вашего приложения с высокими требованиями это может быть быстрее, чем регулярное выражение. Но регулярное выражение чистое и, вероятно, достаточно быстрое.
Возможно, это модифицированное регулярное выражение имеет для вас некоторые преимущества:
<[^>]*(?:>|$)
Для части вашего приложения с высокими требованиями это может быть быстрее, чем регулярное выражение. Но регулярное выражение чистое и, вероятно, достаточно быстрое.
Возможно, это модифицированное регулярное выражение имеет для вас некоторые преимущества:
<[^>]*(?:>|$)
[^>] *
лучше, чем (. | \ N)
Использование REReplaceNoCase ()
не нужно, если нет букв в шаблон. Сопоставление регулярных выражений без учета регистра происходит медленнее, чем с учетом регистра.
Лучшим способом обычно является приведение <
к & lt;
] и с >
по & gt;
. Таким образом, вы не делаете предположений о природе сообщения. Кто-то может говорить о
или пытается быть <
, или описывает нажатие клавиши
или использует математику 1
. Даже смайлы могут запускать регулярное выражение <8P X>
<cfloop from="1" to="#ArrayLen(myFeed.item)#" index="i">
<cfset myFeed.item[i].description.value = ReplaceList(myFeed.item[i].description.value, '<,>', '<,>')>
</cfloop>
HTML не является регулярным языком, поэтому использование регулярных выражений в (неконтролируемом) HTML - это то, что следует делать с большой осторожностью (если вообще).
Рассмотрим, например, следующий допустимый сегмент HTML:
<img src="boat.jpg" alt="a boat" title="My boat is > everything! I <3 my boat!">
Вы заметите, как подсветчик синтаксиса задыхается от этого - как и существующее регулярное выражение, которое было предложено.
Если вы не уверены, , что строка, которую вы обрабатываете, не будет содержать HTML-код, подобный приведенному выше, вам следует избегать предположений / компромиссов, которые вынудит вас сделать один / чистый маршрут регулярного выражения.
(Примечание: та же проблема относится к также предлагаемый метод char-by-char.)
Чтобы решить вашу проблему, вы должны использовать парсер DOM, чтобы преобразовать вашу строку в объект HTML, перебирая каждый элемент и преобразовывая в текст.
Если у вас есть действующий XHTML, вы можете использовать CF XmlParse ()
для создания объекта, который затем можно зациклить.
Если это может быть не XML HTML, тогда в CF8 нет встроенной опции, поэтому вам придется изучить опции в Java и т. Д.