Код: Выделить всё
Game GameQuest[]Код: Выделить всё
Player PlayerGameQuestLink[]Сущность Вот как определяется мое отношение:
Код: Выделить всё
/**
* @ORM\OneToMany(targetEntity="App\Entity\PlayerGameQuestLink", mappedBy="player")
*/
private $gameQuestLinks;
Код: Выделить всё
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="player_retailer_game_quest_link")
*/
class PlayerRetailerGameQuestLink
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private int $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\PlayerRetailer", inversedBy="gameQuestLinks")
*/
private $player;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\GameQuest")
*/
private $gameQuest;
/**
* @ORM\Column(type="datetime", nullable="true")
*/
private $activatedAt = null;
/**
* @ORM\Column(type="datetime", nullable="true")
*/
private $doneAt = null;
/**
* @ORM\Column(type="datetime", nullable="true")
*/
private $completedAt = null;
Код: Выделить всё
public function resetGameQuests(Game $game)
{
$players = $game->getPlayers();
/**
* @var Player $player
*/
foreach ($players as $player) {
$player->getGameQuestLinks()->forAll(function($index, $link) {
$this->em->remove($link);
});
//$player->getGameQuestLinks()->clear();
//$this->em->persist($player);
}
$this->em->flush();
// $gameQuests = $game->getGameQuests()->toArray();
// foreach ($gameQuests as $gameQuest) {
// $this->em->remove($gameQuest);
// }
// $game->getGameQuests()->clear();
//
// $this->em->flush();
// $this->createGameQuests($game);
}
Я вижу, что он действительно фиксирует правильные операторы SQL. Но как только commit() возвращает успешный результат соединения PDO, все записи в таблице БД воссоздаются с другими идентификаторами. Я знаю, это звучит странно, но это правда.
Еще более странно то, что когда я копирую и вставляю эти операторы SQL (
Код: Выделить всё
DELETE FROM player_game_quest_link WHERE id = N;Я попробовал запустить операторы DELETE в транзакции вручную — удаление прошло успешно. Также я попытался временно отредактировать код Doctrine и удалить вызовы $conn->beginTransaction() и $conn->commit(), а также добавил $conn->setAutocommit(true) - но ошибка все еще существует, так что она определенно не связана с транзакцией.
Также попробовал разместить точки останова в других разделах метода commit() UnitOfWork, чтобы увидеть если есть какие-либо вставки или обновления коллекций - ничего не срабатывает.
Наконец, я поместил точку останова внутри файлаvendor/doctrine/dbal/src/Connection.php в файле Insert( ) — чтобы гарантировать, что он не будет вызываться во время запроса. На самом деле это не так.
Может ли это быть какая-то редкая проблема с драйвером SQL?
Моя версия Doctrine — 2.7.1 версия Symfony — 5.3, а версия MySQL Server — 8.0.36. Версия PHP — 8.3.2. Я запускаю его в Windows 10 1909.
Пожалуйста, помогите отладить, если это возможно
Подробнее здесь: https://stackoverflow.com/questions/785 ... m-mysql-db
Мобильная версия