簡體   English   中英

使用Doctrine2的CodeIgniter到Symfony2

[英]CodeIgniter to Symfony2 with Doctrine2

我真的很難將這個查詢轉換為Doctrine:

public function get_order($id)
{
    $this->db->select('*');
    $this->db->from('tbl_orderline');
    $this->db->join('tbl_order', 'tbl_order.orderNo = tbl_orderline.orderNo');
    $this->db->join('tbl_customer', 'tbl_customer.customerNo = tbl_order.customerNo');
    $this->db->join('tbl_product', 'tbl_product.productNo = tbl_orderline.productNo');
    $this->db->where('tbl_order.orderNo', $id);

    $query = $this->db->get();
    return $query->result_array();
}

你能幫幫我嗎? 有什么建議? 謝謝

// if you're currently in custom Repository class then:
$qb = $this->createQueryBuilder('ol');

// if you're in a controller, then should be:
$qb = $em->getRepository('AppBundle:OrderLine')->createQueryBuilder('ol'); // Or whatever your bundle name is.

// query alias legend:

// ol - order line
// o - order
// c - customer
// p - product

// Your query builder should look something like this:

$qb
    ->addSelect('o, c, p')
    ->leftJoin('ol.order', 'o') // this is your relation with [order]
    ->leftJoin('o.customer', 'c') // this is your relation with [customer] from [order]
    ->leftJoin('ol.product', 'p') // this is your relation with [product] from [order line]
    ->where($qb->expr()->eq('ol.id', ':orderLineId')
    ->setParameter('orderLineId', $id)
    ->getQuery()
    ->getOneOrNullResult();

注意:

由於您沒有提供任何實體映射,因此這完全是出乎意料的。 您很可能會更改此查詢中的屬性,但至少應該為您提供所需的開始。

如果你不明白的話,不要猶豫。

我總是發現直接用dql編寫更容易。 試圖將查詢構建器用於復雜的東西讓我瘋狂。 這顯然要求您在實體中映射正確的關系,無論是注釋還是與orm文件。

顯然很難測試我下面的內容,所以你可能需要調試一下。

$query = $this->getEntityManager()->createQuery(
'select orderline, order, customer, product
from BundleName:tlb_orderline orderline
join orderline.orderNo order
join order.customerNo customer
join orderline.productNo product
where order.orderNo = :id');

$query->setParameter('id' => $id);

return $query->getResult();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM