doctrine2 - Bagaimana untuk mengisih tatasusunan Entiti yang sepadan apabila menggunakan pemetaan satu-ke-banyak Doktrin dalam symfony?
给我你的怀抱
给我你的怀抱 2017-05-16 16:43:51
0
2
621

Saya menggunakan Doktrin untuk pemetaan satu-ke-banyak, seperti satu orang (Orang) dan berbilang kanak-kanak (Kanak-kanak, saya harap apabila menggunakan Doktrin untuk mendapatkan Kanak-kanak secara automatik, kanak-kanak itu boleh diisih mengikut umur).

Maafkan saya: Fungsi manakah yang perlu dibebankan untuk mencapai matlamat ini? persion->Fungsi yang manakah getChildren() memanggil untuk melaksanakan pertanyaan SQL?

Sukar untuk mencari keputusan untuk keperluan sedemikian, sila berikan saya nasihat.

给我你的怀抱
给我你的怀抱

membalas semua (2)
伊谢尔伦

Penyelesaian adalah seperti berikut:

Ubah suai kaedahgetChildrenkelasOrangPerson类的getChildren方法

children; } if (!in_array(strtoupper($orderedByAge), ['ASC', 'DESC'])) { throw new \InvalidArgumentException('参数错误,必须是"ASC"或"DESC"中的一个'); } $order = 'ASC' === $orderedByAge ? Criteria::ASC : Criteria::DESC; $criteria = Criteria::create()->orderBy(['age' => $order]); return $this->children->matching($criteria); } // ...

如果不想修改getChildren方法,可以写一个新的方法getChildrenOrderedByAge,道理同上。

总结:

Doctrine的一对多或者多对多关系中,Entity中所谓的属性是DoctrineCommonCollectionsCollection接口的某一实现的实例,默认情况下是DoctrineCommonCollectionsArrayCollection,上述解决方案中用到的就是这一接口的Filtering API(筛选接口),上述情况下,筛选的条件会最终转化到SQLrrreee

Jika anda tidak mahu mengubah suai kaedah getChildren, anda boleh menulis kaedah baharu getChildrenOrderedByAge, sebab yang sama seperti di atas.

Ringkasan: Dalam hubungan satu-ke-banyak atau banyak-ke-banyak Doktrin , atribut yang dipanggil banyak dalam Entiti ialah DoctrineCommonCollectionsCollection Contoh pelaksanaan ialah DoctrineCommonCollectionsArrayCollectionsecara lalai API Penapisan(antara muka penapisan) antara muka ini digunakan dalam penyelesaian di atas kes di atas, Keadaan yang ditapis akhirnya akan ditukar kepada lapisan SQLuntuk diproses bagi mencapai pengoptimuman prestasi. Akhir sekali, pautan dokumen rasmi yang berkaitan adalah seperti berikut: Koleksi Penapisan
    我想大声告诉你

    Tidak mengapa menggunakan kaedah @vinzao, tetapi Doctirne menyediakan kaedahOrderBy:

    Orang:

    Kanak-kanak:

      Muat turun terkini
      Lagi>
      kesan web
      Kod sumber laman web
      Bahan laman web
      Templat hujung hadapan
      Tentang kita Penafian Sitemap
      Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!