2012-12-20 87 views
1

我對數據庫的原則查詢有問題,我不確定是哪裏出了問題。 這裏的交易: 這是實際的MySQL查詢我用來創建數據庫:左/左加入的MySQL /原則問題

  create table productos ( 
       codigoProducto int (8) unsigned auto_increment primary key, 
       nombre varchar(100) not null, 
       id_categoria smallint(3) unsigned, 
       descripcion text, 
       foto varchar(100), 
       precio smallint (4) unsigned not null, 
       visitado int (7), 
       habilitado boolean, 

       foreign key (id_categoria) 
       references categorias(id) 
       on update cascade 
       on delete restrict 
      )engine=innoDB; 

      create table facturas( 
       id int (8) unsigned auto_increment primary key, 
       id_comprador int (7) unsigned, 
       metodo_pago boolean, 
       forma_entrega boolean, 
       fecha datetime, 

       foreign key (id_comprador) 
       references compradores(id) 
       on update cascade 
       on delete cascade 
      )engine=innoDB; 

      create table detallefactura(
       id int(8) unsigned auto_increment primary key, 
       id_producto int(8) unsigned, 
       id_factura int(8) unsigned, 
       cantidad smallint (4), 

       foreign key(id_producto) 
       references productos(codigoProducto) 
       on update cascade 
       on delete cascade, 

       foreign key(id_factura) 
       references facturas(id) 
       on update cascade 
       on delete cascade 
      )engine=innoDB; 

「detalleFactura」是連接表的「PRODUCTOS」和「facturas」,爲了有超過1個產品每張發票。因此,與我試圖採取在同一張發票上購買的所有產品如下:

  static function traerProductosComprados($id){ 
       $query = Doctrine_Query::create() 
         ->select('d.id, p.nombre, p.precio, d.cantidad') 
         ->from('Detallefactura d') 
         ->leftjoin('d.Productos p') 
         ->where('d.id_factura = ?',$id); 
       return $query->execute()->toArray(); 
      } 

如果我查詢的回聲,它顯示以下內容:

  SELECT d.id, p.nombre, p.precio, d.cantidad FROM Detallefactura d LEFT JOIN d.Productos p WHERE d.id_factura = ?  

,當我這個粘貼到phpMyAdmin的,它引發以下錯誤:

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 'WHERE d.id_factura = ? LIMIT 0, 30' at line 1;

我出出主意吧,請告訴我,如果有別的我錯過!

+0

學說爲你顯示一個錯誤?你如何迴應查詢? – j0k

+0

你迴應的那個查詢是一個DQL語句。它不能在PhpMyAdmin中使用,它只能說SQL。 –

回答

0

你需要指定ON子句爲你的左連接

+0

當你不知道時請不要回答。在Doctrine中執行左連接的語法是正確的。 [看文檔](http://doctrine.readthedocs.org/en/latest/en/manual/dql-doctrine-query-language.html#join-syntax) – j0k

+0

問題是他可能沒有從表類的引用Productos to Detallefactura使Docrtine生成錯誤的查詢。您可以在DQL中手動啓用ON子句 – Vadyus

+0

而不是重寫ON子句,我認爲最好修復關節。 – j0k