Doctrine_Core::getTable()-›findAll() จะระบุลำดับได้อย่างไร?

เมื่อใช้วัตถุ Doctrine_Table เป็นไปได้หรือไม่ที่จะระบุลำดับของคอลเลกชันที่ส่งคืนเมื่อใช้ findAll() หรือ findByWhatever()

ในเอกสาร ฉันเห็นบางอย่างเกี่ยวกับ getOrderByStatement() และ processOrderBy() แต่ไม่ใช่ ชัดเจนถึงวิธีใช้...


person Jake Wilson    schedule 19.08.2011    source แหล่งที่มา


คำตอบ (4)


คุณยังสามารถปล่อยอาร์เรย์แรกว่างไว้ได้

  $em->getRepository('BackendDestinyBundle:Destiny')->findBy(array(), array('title'=>'asc'));
person Aaron    schedule 25.03.2013
comment
โอเค แย่แล้ว อย่าร้องไห้นะ ได้โปรดพยายามช่วยหน่อยเถอะ - person Aaron; 25.03.2013
comment
ขอบคุณ นี่คือสิ่งที่ฉันต้องการ รวดเร็ว ง่ายดาย และใช้งานได้จริง - person dnshio; 01.07.2013
comment
นี่ดีกว่าตัวสร้างแบบสอบถามจริง ๆ (ในความคิดของฉัน) หลังจากนั้นการใช้งาน findAll() คือการเรียกเช่นนี้ findBy(array()) นี่คือ ซอร์สโค้ด - person Mateo Torres; 28.09.2013
comment
ขอบคุณ! ฉันเพิ่งใช้สิ่งนี้: public function findAll() { return $this->findBy(array(), array('name' => 'ASC')); } หากต้องการเขียนทับคำสั่ง findAll ที่ส่งคืนอย่างรวดเร็วสำหรับการส่งคืนแบบฟอร์มของเอนทิตี - person Scott Flack; 25.10.2013

ที่จริงแล้วคุณสามารถระบุลำดับเริ่มต้นได้ในสคีมาของคุณ:

Foo:
  columns:
    ...
  options:
    orderBy: bar DESC

โปรดทราบว่าเมื่อคุณต้องการระบุลำดับอื่น คุณยังคงสามารถสร้างแบบสอบถามและแทนที่ลำดับเริ่มต้นได้

person Gerry    schedule 19.08.2011
comment
ไม่ทราบว่า. นั่นมีประโยชน์มาก ขอบคุณ - person Jake Wilson; 19.08.2011
comment
นี่สำหรับความสัมพันธ์เท่านั้นไม่ใช่เหรอ? - person Flask; 20.08.2011
comment
ไม่มันใช้ได้กับโมเดลด้วย แต่จริงๆ แล้วคุณสามารถใช้เคล็ดลับนี้กับความสัมพันธ์ได้เช่นกัน - person Gerry; 20.08.2011
comment
นี่ไม่ใช่ความคิดที่ดี Orderby อาจมีราคาแพง และคุณไม่ต้องการออกให้สำหรับทุกคำถาม - person Mike Purcell; 28.07.2015

ตามที่ Jon Wage คุณควรสร้างแบบสอบถามในกรณีนี้... พบได้ใน mailing- รายการ

person Flask    schedule 19.08.2011
comment
ใช่ ฉันคิดว่านั่นอาจเป็นทางออกเดียว แต่ก็ไม่แน่ใจ ขอบคุณ - person Jake Wilson; 19.08.2011

ในกรณีของฉัน ปัญหาคือฉันมีข้อความแบบนี้

$destinos  = $em->getRepository('BackendDestinyBundle:Destiny')->findAll();

ในที่สุดฉันก็เปลี่ยนเป็นคำสั่ง CreateQuery มันก็เหมือนกันทุกประการ แต่ฉันสามารถใส่ประโยค OrderBy ได้

$destinos  = $em->createQuery("SELECT d FROM BackendDestinyBundle:Destiny d order by d.name")->getResult();
person Jorge Ibacache    schedule 14.03.2013
comment
คุณกำลังพูดถึงหลักคำสอน 2 ที่นี่ และอีกอย่าง นี่ไม่ใช่วิธีที่ดีในการใช้หลักคำสอน ควรสร้างแบบสอบถามโดยไม่ต้องเขียนโค้ด sql ... คุณกำลังสูญเสียข้อได้เปรียบทั้งหมดจาก ORM ที่นี่... - person j0k; 14.03.2013
comment
จริงๆ แล้วเขาใช้ ORM ค่อนข้างดีที่นี่เนื่องจากเป็น DQL ไม่ใช่ SQL - person Łukasz Wojciechowski; 22.09.2013