การใช้ Symfony2 Doctrine2 ของบางส่วน

จากการอ่านเอกสารและโพสต์ stackoverflow อื่น ฉันคิดว่าถ้าฉันต้องการส่งคืนข้อมูลคอลัมน์เพียงสองสามคอลัมน์ วิธีที่ถูกต้องในหลักคำสอนคือการใช้บางส่วน (นี่เป็นแบบสอบถามแบบอ่านอย่างเดียว)

อย่างไรก็ตามโค้ดด้านล่างส่งคืนทั้งหมด 100 คอลัมน์แทนที่จะเป็น 3 คอลัมน์ที่ฉันระบุ ใครช่วยอธิบายได้ไหมว่าทำไม?

ขอบคุณมนิชา

public function showAction(Request $request)
{
    if ($request->getMethod() == 'GET') {
        $id = $request->get('locationid');
        $kfType = $request->get('type');
        $em = $this->getDoctrine()
                    ->getManager();

        $data = $em->createQueryBuilder()
                    ->select ( array( 'partial d.{id, locationid, kfFyp}' ))
                    ->from('DashDataBundle:Data',  'd')
                    ->where('d.locationid = :locationid')
                    ->setParameter('locationid', $id)
                    ->setMaxResults(100)
                    ->getQuery()
                    ->getResult();
    }

person manisha    schedule 02.08.2013    source แหล่งที่มา


คำตอบ (1)


แบบสอบถามนี้จะส่งคืนเอนทิตีหลักคำสอนที่มีหลายสาขา แต่จากนั้นคุณใช้ partial คำหลัก ช่องนี้จะว่างเปล่า เฉพาะฟิลด์ที่ระบุเท่านั้นที่จะเต็มไปด้วยข้อมูล

หากคุณไม่ต้องการให้ความชุ่มชื้นกับวัตถุ คุณสามารถรับข้อมูลในอาร์เรย์แบบง่ายได้หากคุณระบุ

->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY)
person Alexey B.    schedule 02.08.2013
comment
ขอบคุณ! นั่นทำให้มันทำงานได้ตามที่ฉันคาดหวัง โดยแสดงเฉพาะฟิลด์ที่ฉันขอในอาร์เรย์ที่ส่งคืนแทนที่จะเป็นออบเจ็กต์ทั้งหมด - person manisha; 02.08.2013
comment
เนื่องจากฉันไม่ได้ใช้วัตถุทั้งหมด ฉันควรกังวลกับ QueryBuilder หรือไม่ ใช้ DQL ดีกว่าไหม? - person manisha; 02.08.2013
comment
ไม่มีความแตกต่างใหญ่ อาจจะบริสุทธิ์ dql เร็วขึ้นเล็กน้อย มันแค่สร้างการสืบค้นเลยไม่มีอะไรอื่น - person Alexey B.; 03.08.2013