2016-04-23 17 views
3

私は電子商取引アプリケーションを構築しており、ユーザーの注文を保存したいと考えています。Symfony2 Doctrine - データベース内のストレージアレイ

FYI:私は、だから私は私のOrderエンティティに配列フィールドorderを持っsymfony 2.8Doctrine2

を使用しています。私のコントローラーでは、私が望むすべての情報(製品、ユーザー情報、金額、tva)を持つ配列を作成します。 しかし、私はSQLエラーを持っています、そして、なぜ私は知りません。しかし、私はsymfony2が私の配列をシリアライズすると思います。

エラー:

キャッチされないPHP例外教義\ DBAL \例外の\ SyntaxErrorException:(注文。INSERT INTO(検証、日付、参照、順序、user_idの)VALUES」を実行しながら、」例外が発生しましたか、? params [0、 "2016-04-23 13:07:55"、0、 "a:7:{s:3:\" tva \ "; a:2:{s、 :3:\ "20%\"; d:299.80000000000001; s:3:\ "10%\"; d:21;}:7:\ "製品\"; a:3:{i:1; a :s:9:\ "参照\"; s:9:\ "PROD00001 \"; s:4:\ "名前\"; s:10:\ "MacBookPro \"; s:8:\ " d:1199.8;} i:2; a:5:{s:9:0}; i:1; s:7:\ "priceHT \"; d:999; s:8:\ "priceTTC \"; s:9:\ "PROD00002 \"; s:4:\ "名前\"; s:16:\ "ヘッドホンアップル\"; s:8:\ "数量\"; s:1 s:8:\ "priceTTC \"; d:76.989999999999995;} i:3; a:5:{s:9:\ "3 \"; s:7:\ "priceHT \"; d:69.989999999999995; "refe s:9:\ "PROD00003 \"; s:4:\ "名前\"; s:20:\ "T \ u00e9l \ u00e9visionサムスン\"; s:8:\ "数量\"; i s:8:\ "price \"; s:8:\ "priceTTC \"; d:599.99000000000001;}} s:8:\ "delivery \"; a:9:{s: s:4:\ "John \"; s:5:\ "電子メール\"; s:\ "姓\"; s: 12:\ "[email protected] \"; s:5:\ "電話\"; s:10:\ "6666666666 \"; s:6:\ "住所\"; s:14:\ "10 rue s:6:\ "ナント\"; s:7:\ "国\"; s:6 5:\ "44000 \";} s:6:\ "請求書\"; a:9:{s:9:\ "ファーストネームs:4:\ "John \"; s:5:\ "電子メール\"; s:12:\ "テスト: s:5:\ "電話\"; s:10:\ "6666666666 \"; s:6:\ "住所\"; s:14:\ "10 rue du test \"; s:6:\ "ナント\"; s:7:\ "国\"; s:6:\ "フランス\ s:10:\ "郵便番号\"; s:5:\ "44000 \"; s:8:\ "amountHT \"; d:1709; s:9:\ "amountTTC \"; d:2030 ; SQLSTATE [42000]:構文エラーまたはアクセス違反:1064 SQL構文にエラーがあります。 ;あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして、正しい構文が近くにある 'order、user_id)VALUES(0、' 2016-04-23 13:07:55 '、0、' a:7:{s:3 :\ "tva \"; a:2:{s:3: 'at line 1}'のC:\ WCOM \ www \ eCommerce \ vendor \ doctrine \ dbal \ lib \ Doctrine \ DBAL \ Driver \ AbstractMySQLDriver.php行90

これは私の注文エンティティ

/** 
    * Orders 
    * 
    * @ORM\Table(name="orders") 
    * @ORM\Entity(repositoryClass="Ecommerce\EcommerceBundle\Repository\OrdersRepository") 
*/ 
class Orders 
{ 
/** 
* @var int 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @var bool 
* 
* @ORM\Column(name="validate", type="boolean") 
*/ 
private $validate; 

/** 
* @var \DateTime 
* 
* @ORM\Column(name="date", type="datetimetz") 
*/ 
private $date; 

/** 
* @var int 
* 
* @ORM\Column(name="reference", type="integer") 
*/ 
private $reference; 

/** 
* @ORM\ManyToOne(targetEntity="Users\UsersBundle\Entity\Users", inversedBy="orders") 
* @ORM\JoinColumn(nullable=true) 
*/ 
private $user ; 

/** 
* @var array 
* 
* @ORM\Column(name="order", type="array") 
*/ 
private $order; 


/** 
* Get id 
* 
* @return integer 
*/ 
public function getId() 
{ 
    return $this->id; 
} 

/** 
* Set validate 
* 
* @param boolean $validate 
* @return Orders 
*/ 
public function setValidate($validate) 
{ 
    $this->validate = $validate; 

    return $this; 
} 

/** 
* Get validate 
* 
* @return boolean 
*/ 
public function getValidate() 
{ 
    return $this->validate; 
} 

/** 
* Set date 
* 
* @param \DateTime $date 
* @return Orders 
*/ 
public function setDate($date) 
{ 
    $this->date = $date; 

    return $this; 
} 

/** 
* Get date 
* 
* @return \DateTime 
*/ 
public function getDate() 
{ 
    return $this->date; 
} 

/** 
* Set reference 
* 
* @param integer $reference 
* @return Orders 
*/ 
public function setReference($reference) 
{ 
    $this->reference = $reference; 

    return $this; 
} 

/** 
* Get reference 
* 
* @return integer 
*/ 
public function getReference() 
{ 
    return $this->reference; 
} 

/** 
* Set user 
* 
* @param \Users\UsersBundle\Entity\Users $user 
* @return Orders 
*/ 
public function setUser(\Users\UsersBundle\Entity\Users $user = null) 
{ 
    $this->user = $user; 

    return $this; 
} 

/** 
* Get user 
* 
* @return \Users\UsersBundle\Entity\Users 
*/ 
public function getUser() 
{ 
    return $this->user; 
} 
/** 
* Constructor 
*/ 
public function __construct() 
{ 
    $this->products = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

/** 
* Add products 
* 
* @param \Ecommerce\EcommerceBundle\Entity\Products $products 
* @return Orders 
*/ 
public function addProduct(\Ecommerce\EcommerceBundle\Entity\Products $products) 
{ 
    $this->products[] = $products; 

    return $this; 
} 


/** 
* Set order 
* 
* @param array $order 
* @return Orders 
*/ 
public function setOrder($order) 
{ 
    $this->order = $order; 

    return $this; 
} 

/** 
* Get order 
* 
* @return array 
*/ 
public function getOrder() 
{ 
    return $this->order; 
} 
} 

マイコントローラー

public function orderAction(Request $request){ 

    $session = $request->getSession() ; 
    $em = $this->getDoctrine()->getManager() ; 
    $generator = $this->container->get('security.secure_random'); 
    if(!$session->has('order')){ 
     $order = new Orders(); 
    } else { 
     $order = $em->getRepository('EcommerceBundle:Orders')->find($session->get('order')) ; 
    } 
    $order->setDate(new \DateTime()); 
    $order->setUser($this->container->get('security.context')->getToken()->getUser()); 
    $order->setValidate(0); 
    $order->setReference(bin2hex($generator->nextBytes(20))); 
    $order->setOrder($this->order($request)); 
    if(!$session->has('order')){ 
     $em->persist($order); 
     $session->set('order',$order) ; 
    } 
    $em->flush() ; 

    return new Response($order->getId()); 
} 
です

私は本当に今は固執しています

詳しい情報やコードが必要な場合は教えてください。

ありがとうございました。

答えて

2

orderは予約済みのSQLワードです。あなたはそれを引用する必要があります:Quoting Reserved Words

+0

ああ私の悪い、それは愚かなエラーでした。今はうまくいきます、ありがとう! – Letsrocks

関連する問題