2017-08-01 107 views
1

連接查詢的結果我有2個未通過ORM相關的表,所以我做JOIN如下:展在樹枝中的Symfony

$dql="SELECT u, o 
     FROM BackendBundle:Orders o 
     JOIN BackendBundle:Users u 
     WITH o.userid=u.id"; 
$query=$em->createQuery($dql); 

當我將查詢發送到樹枝上表現出來該屏幕顯示我一個錯誤。

這是twig的代碼:

{% for ordenes in pagination %} 
    <td>{{ ordenes.orderid }}</td> 
    <td>{{ ordenes.orderdate|date("Y-m-d") }}</td> 
{% endfor %} 

和錯誤是這樣的:

無論是屬性 「訂單ID」,也不的方法 「的OrderID()」 之一, 「getorderid () 「/」 isorderid()」或 「__call()」 存在並具有在公共類訪問 「BackendBundle \實體\用戶」

如果我運行twig這個代碼:

{{dump(pagination)}} 

它正確地顯示我什麼該查詢返回:

#currentPageNumber: 3 
    #numItemsPerPage: 20 
    #items: array:40 [▼ 
    0 => Orders {#522 ▼ 
     -orderid: 158 
     -orderdate: DateTime {#476 ▶} 
     -ordernumber: "FFFFFFFFFFF" 
     -customername: "UUUUUUUUUUUU" 
     -customeraddress: "OOOOOO" 
     -countrycode: "US" 
     -shippingaddress: "PPPPPP" 
     -status: "Ordered" 
     -subtotal: "5.00" 
     -shippingcost: "2.82" 
     -tax: "0.00" 
     -discount: "0.00" 
     -totalorder: "7.82" 
     -shippingcarrier: "Fedex" 
     -userid: "1206" 
    } 
    1 => Users {#525 ▼ 
     -id: 1206 
     -username: "[email protected]" 
     -yourname: null 
     -firstname: "GGGG" 
     -lastname: "IIIIII" 
     -middlename: "" 
     -address: "oooooooooo" 
     -address2: "" 
     -apartment: "" 
     -pobox: "" 
     -city: "Monsey" 
     -state: "NY" 
     -zipcode: "88888888" 
     -country: "USA" 
     -countrycode: "US" 
     -email: "[email protected]" 
     -datein: DateTime {#521 ▶} 
    } 

我的問題是我怎麼能證明這個結果在樹枝?

+0

什麼ar你試圖在這裏實現嗎?您當前構建了訂單和用戶列表,迭代該列表並輸出訂單將失敗,正如您現在看到循環觸及第一個用戶實體時那樣。如果這是有意的,並且您希望在同一個表中列出訂單和用戶,那麼在決定輸出哪些實體字段之前,您需要檢查當前分頁項(ordenes)是哪個實體。我高度期望你不會試圖製造一個混亂的訂單和用戶列表,但是當你沒有說出你期望的結果時,推薦一些東西並不容易。 – JimL

+0

也許你的意思是:'{{for fordedene in pagination.items }}' – Keloo

+0

感謝您的意見。 JimL - 我希望能夠顯示一張包含用戶訂單信息的表格。 – juanitourquiza

回答

0

經過審查並試圖解決這個問題。最後創建的文件和2個表之間這樣的關係:我更新了數據庫

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

    return $this; 
} 

/** 
* Get user 
* 
* @return \BackendBundle\Entity\Users 
*/ 
public function getUser() 
{ 
    return $this->user; 
} 

php bin/console doctrine:schema:update --force 

我做

//BackendBundle\Entity\Orders: 
indexes: 
    fk_order_user1_idx: 
     columns: 
      - user_id 
...... 
manyToOne: 
    user: 
     targetEntity: Users 
     cascade: { } 
     fetch: LAZY 
     mappedBy: null 
     inversedBy: null 
     joinColumns: 
      user_id: 
       referencedColumnName: id 
     orphanRemoval: false 

另外在實體以這種方式查詢:

$dql="SELECT u, o 
     FROM BackendBundle:Orders o 
     JOIN o.user u"; 
$query=$em->createQuery($dql);