コントローラ内のデータをデータベースに格納しようとしたときにエラーが発生しました。私はすべての変数をチェックし、どれもnullではありません。INSERT INTOを使用したSQL要求でエラーが発生しました
SyntaxErrorException: An exception occurred while executing 'INSERT INTO message (message, vu, from, date, type, id_player) VALUES (?, ?, ?, ?, ?, ?)' with params ["ds", 0, "jean3", "2017-05-05 18:04:39", "message", 7]:
そして私は私のtypageが間違っている可能性がなぜ、(文字列、ブール値、文字列、日時、文字列、int型)ことになって表示されていない:私は私のフォームを送信するときに、私はこのエラーを取得します。 intは外部キーですから、この最後の行(setIdPlayerとsetPlayer)のIDとエンティティintをコントローラに設定します。
public function carteAction(Request $request)
{
$player = $this->container->get("security.token_storage")->getToken()->getUser();
$message = new Message;
//dump($player->getCharacters());
$form = $this->createFormBuilder($message)
->add('message', TextareaType::class, array('label' => 'Message :'))
->add('registration', SubmitType::class, array('label' => 'Envoie du message'))
->getForm();
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid())
{
if($request->query->has('to'))
{
dump("sending...");
$message->setMessage($form['message']->getData());
$message->setFrom($player->getUsername());
$message->setVu(false);
$message->setDate(date_create());
$message->setType("message");
$to = $this->getDoctrine()->getRepository('AppBundle:Player')
->findByPseudo($request->query->get('to'))[0];
$id_to = $to->getId();
dump($id_to);
dump($to);
$message->setIdPlayer($id_to);
$message->setPlayer($to);
//TODO : get to depuis la database et lui foutre le message
$em = $this->getDoctrine()->getManager();
$em->persist($message); // prépare l'insertion dans la BD
$em->flush();
}
}
}
その後、私のメッセージエンティティ:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Message
*
* @ORM\Table(name="message")
* @ORM\Entity(repositoryClass="AppBundle\Repository\MessageRepository")
*/
class Message
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="message", type="text")
*/
private $message;
/**
* @var bool
*
* @ORM\Column(name="vu", type="boolean")
*/
private $vu;
/**
* @var string
*
* @ORM\Column(name="from", type="string")
*/
private $from;
/**
* @var \DateTime
*
* @ORM\Column(name="date", type="datetime")
*/
private $date;
/**
* @var string
*
* @ORM\Column(name="type", type="string", length=255)
*/
private $type;
/**
* @var int
* @ORM\ManyToOne(targetEntity="Player", inversedBy="messages")
* @ORM\JoinColumn(name="id_player", referencedColumnName="id")
*/
private $player;
/**
* @var int
* @ORM\Column(name="id_player", type="integer")
*/
private $idPlayer;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set message
*
* @param string $message
*
* @return Message
*/
public function setMessage($message)
{
$this->message = $message;
return $this;
}
/**
* Get message
*
* @return string
*/
public function getMessage()
{
return $this->message;
}
/**
* Set from
*
* @param string $from
*
* @return Message
*/
public function setFrom($from)
{
$this->from = $from;
return $this;
}
/**
* Get from
*
* @return string
*/
public function getFrom()
{
return $this->from;
}
/**
* Set vu
*
* @param boolean $vu
*
* @return Message
*/
public function setVu($vu)
{
$this->vu = $vu;
return $this;
}
/**
* Get vu
*
* @return bool
*/
public function getVu()
{
return $this->vu;
}
/**
* Set date
*
* @param \DateTime $date
*
* @return Message
*/
public function setDate($date)
{
$this->date = $date;
return $this;
}
/**
* Get date
*
* @return \DateTime
*/
public function getDate()
{
return $this->date;
}
/**
* Set type
*
* @param string $type
*
* @return Message
*/
public function setType($type)
{
$this->type = $type;
return $this;
}
/**
* Get type
*
* @return string
*/
public function getType()
{
return $this->type;
}
/**
* Set player
*
* @param \AppBundle\Entity\Player $player
*
* @return Message
*/
public function setPlayer(\AppBundle\Entity\Player $player = null)
{
$this->player = $player;
return $this;
}
/**
* Get player
*
* @return \AppBundle\Entity\Player
*/
public function getPlayer()
{
return $this->player;
}
/**
* Set idPlayer
*
* @param int $idPlayer
*
* @return Message
*/
public function setIdPlayer($idPlayer)
{
$this->idPlayer = $idPlayer;
return $this;
}
/**
* Get idPlayer
*
* @return int
*/
public function getIdPlayer()
{
return $this->idPlayer;
}
}
は、ここに私のコントローラです。
EDIT:私はidplayerなしで試しましたが、私は同じエラーがあります。
EDIT 2:私のプレーヤーのエンティティにいくつかのヌル値がありますか?しかし、私は彼らが何であるかは分かりません(これらはエンティティクラスにある値ではありません)。ここで私は、クエリを実行する前に、私のプレーヤーのために示した)(ダンプです:
Player {#496 ▼
#id: 13
-pseudo: "jean3"
#email: "[email protected]"
#password: "0f22f0605b46b21c396d3aebe9b787bee7bbd3b31ca3548dfa5a8a6c2ec090de"
-dateLog: DateTime {#493 ▶}
-characters: PersistentCollection {#523 ▶}
-messages: PersistentCollection {#549 ▶}
#salt: "380c3fc630f46"
#_entityName: null
#_em: null
#_class: null
}
最後の3つのパラメータがnullですが、私はこれらの自分
実際にはすべてがOKと思われる、いくつかのSQL GUIまたはMySQLのコンソールで直接そのクエリを実行し、それが言っているか見てみてください。 – num8er
manytoOneのリレーションシップ属性として 'private'を使用する理由と、同じジョイン列を持つintegereとしてIdPlayerを使用する理由がわかりません。 'プレーヤーは十分です.'あなたは直接setPlayerを持つことができます –
phpmyadminでこのクエリを試しても同じエラーが発生します –