У меня есть следующий код:
$dateCounter=1;
foreach($teamsA as $teamHome){
foreach($teamsACopy as $teamAway){
if($teamHome!=$teamAway){
$tactic1 = $doctrine->getRepository('LoginLoginBundle:Tactics')
->findByteamTeamid($teamHome->getTeamid());
$tactic2 = $doctrine->getRepository('LoginLoginBundle:Tactics')
->findByteamTeamid($teamAway->getTeamid());
$match = new Match();
$match->setAwayteam($teamAway->getName());
$match->setHometeam($teamHome->getName());
$match->setIsplayed(false);
$match->setSeasonSeasonid($season);
$date = new DateTime(date('Y-m-d H:i:s'));
$date->add(new DateInterval('P'.$dateCounter.'D'));
$match->setDate($date);
$dateCounter++;
$tacticMatchHome = new Tactics();
$tacticMatchHome = $tactic1[0];
$tacticMatchHome->setMatchMatchid($match);
$tacticMatchAway = new Tactics();
$tacticMatchAway = $tactic2[0];
$tacticMatchAway->setMatchMatchid($match);
$em->persist($match);
$em->flush();
$em->persist($tacticMatchHome);
$em->flush();
$em->persist($tacticMatchAway);
$em->flush();
}
}
}
И я получаю следующую ошибку, когда она пытается сохранить ее в базе данных:
[Doctrine\DBAL\DBALException]
An exception occurred while executing 'INSERT INTO match (date, homeTeam, awayTeam, winner, isPlayed, score, season_seasonid) VALUES (?, ?, ?, ?, ?, ?, ?)' with params ["2014-11-16 13:50:24", "FC Beer", "Soccerteam11", null, 0, null, 9]:
SQLSTATE[42000]: Syntax error or acces violation: 1064 You have an error in your SQL syntax: check the manual that corresponds to your MySQL server version for the right syntax to use near 'match (date, homeTeam, awayTeam, winner, isPlayed, score, season_seasonid) VALUE' at line1
Возможно ли, что я получаю эту ошибку, потому что моя дата не в правильном формате? Если да, то как я могу преобразовать его в соответствующий формат?
Я использую Symfony2 и PHP версии 5.4
Изменить имя таблицы для другого - это зарезервированное слово. Не создавайте новый объект только для завершения кода. заменить $tacticMatchHome = new Tactics();
с /** @var $tacticMatchHome Tactics */
. И используйте findOneBy вместо findBy;) И, наконец, вы можете сбросить один раз в конце кода.
match
- зарезервированное ключевое слово MySQL. Если вы собираетесь называть таблицу "match", вы должны обернуть ее в тики:
'INSERT INTO 'match' (date, homeTeam, awayTeam, winner, isPlayed, score, season_seasonid) VALUES (?, ?, ?, ?, ?, ?, ?)'
QuoteStrategy
: doctrine-orm.readthedocs.org/ ен / последний / ссылка / ...