В моем коде Symfony я использовал Doctrine.
В объекте (AppBundle \ Entity \ Core \ User) я определил столбец foodTypes , который связан с другим объектом (AppBundle \ Entity \ FoodRecording \ FoodType).
Я определил отношение «многие ко многим» между Пользователь и FoodType , со связующей таблицей foodrecording_user , объединяющей User.username и FoodType.foodtype_code .
Код показан ниже.
// Entity\Core\User
namespace AppBundle\Entity\Core;
......
class User implements AdvancedUserInterface, \Serializable {
......
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\FoodRecording\FoodType")
* @ORM\JoinTable(name="foodrecording_user",
* joinColumns={@ORM\JoinColumn(name="username", referencedColumnName="username", onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="foodtype_code", referencedColumnName="code", onDelete="CASCADE")}
* )
*/
private $foodTypes;
Как и ожидалось, я могу достать типы еды определенного пользователя, и все кажется хорошим, пока я иногда не узнаю, что ...
каждый раз, когда я запускаю приложение, создается впечатление, что программа неожиданно добавляет новые записи в таблицу foodrecording_user , например, если исходное содержимое в этой таблице:
username foodtype_code
30001180 1020
30001180 1660
30001180 320
30001270 1660
30001270 580
Затем, после запуска приложения с пользователем с именем 30001180, содержимое будет выглядеть примерно так:
username foodtype_code
30001180 1020
30001180 1660
30001180 320
30001270 1660
30001270 580
112 1020
112 1660
112 320
Здесь 112 - это идентификатор (первичный ключ) пользователя (с именем пользователя 30001180).
Это означает, что программа, кажется, дублирует записи пользователя, просто заменяя имя пользователя (30001180) идентификатором (112).
Я уверен, что я не писал никакого кода для дублирования записей в базе данных - я только что прочитал их ( Выбрать ) без каких-либо операций записи, таких как Вставить или Обновить .
Может кто-нибудь сказать мне, почему это произошло? Я так растерялся!
Большое спасибо.