Rumah > Soal Jawab > teks badan
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.
伊谢尔伦2017-05-16 16:45:51
Ubah suai kaedah getChildren
kelas Orang
Person
类的getChildren
方法
<?php
// src/AppBundle/Entity/Person.php
// ...
use Doctrine\Common\Collections\Criteria;
//...
/**
* @param string $orderedByAge "ASC"|"DESC"
*/
public function getChildren($orderedByAge=null)
{
if (null === $orderedByAge) {
return $this->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
(筛选接口),上述情况下,筛选的条件会最终转化到SQL
rrreee
getChildren
, anda boleh menulis kaedah baharu getChildrenOrderedByAge
, sebab yang sama seperti di atas. Ringkasan:🎜 🎜Dalam hubungan satu-ke-banyak atau banyak-ke-banyak
DoctrineCommonCollectionsArrayCollection
secara 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 SQL
untuk diproses bagi mencapai pengoptimuman prestasi. 🎜
🎜Akhir sekali, pautan dokumen rasmi yang berkaitan adalah seperti berikut: Koleksi Penapisan🎜我想大声告诉你2017-05-16 16:45:51
Tidak mengapa menggunakan kaedah @vinzao, tetapi Doctirne menyediakan kaedah OrderBy
:
Orang:
<?php
// src/AppBundle/Entity/Person.php
class Person
{
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Children", mappedBy="person")
* @ORM\OrderBy({"age"="DESC"})
*/
protected $childrens;
}
Kanak-kanak:
<?php
// src/AppBundle/Entity/Children.php
class Children
{
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Person", inversedBy="childrens")
*/
protected $person;
}