PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PHP ORM和优化的关系查询大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我需要一个PHP ORM才能很好地处理关系.
虑以下Zend中的代码

$persons = new Persons();
$person = $persons->find(5)->current();
echo 'Name: '.$person->fullname;

$phones = $person->findDependentRowset('Phones');
foreach($phones as $phonE)
    echo 'Phone: '.$phone->phonenumber; 

或以下xPDO中的代码

$person = $xpdo->getObject('Persons', 5);
echo 'Name: '.$person->get('fullname');

$phones = $person->getMany('Phones');
foreach($phones as $phonE)
    echo 'Phone: '.$phone->get('phonenumber');

在这两个脚本中,ORM均执行以下两个查询

SELECT * FROM persons WHERE id=5;
SELECT * FROM phones WHERE person=5;

这意味着对主对象进行一次查询,对每个关系进行一次查询,但是我需要对主对象及其关系使用一个查询
xPDO可以按以下方式进行操作:

$person = $xpdo->getObjectGraph('Persons', '{"Phones":{}}', 5);
echo 'Name: '.$person->get('fullname');

foreach($person->Phones as $phonE)
    echo 'Phone: '.$phone->get('phonenumber');

执行以下查询

SELECT * FROM persons
LEFT JOIN phones ON phones.person=persons.id
WHERE persons.id=5

这很棒,但是无法设置要从表中获取的字段!
这意味着在这种情况下,xPDO使用“ SELECT *”,因此如果我得到一个对象及其4个关系,我将获得所有这些表的所有字段!

所以我需要一个ORM来执行下面的示例查询,例如:

SELECT persons.fullname , phones.phonenumber FROM persons
LEFT JOIN phones ON phones.person=persons.id
WHERE persons.id=5

Doctrine可以通过DQL做到这一点,但我认为Doctrine对个人项目不利.有没有PHP ORM可以做到这一点?

谢谢
AHHP

解决方法:

xPDO可以做到.您只需要调整您的想法和要求即可.

请记住,objectGraph使用对象的类名,在图和查询中使用图中的关系.

 $criteria = $this->xpdo->newQuery('prefixClient');
            if (!empty($limit))
                $criteria->limit($limit);
            $criteria->where(array('Child.planid' => $this->getprimaryKey(),
                                   'Child.active' => true,
                                   'GrandChild@L_857_19@meAttribute' => true,
                                   'GreatGrandChild@L_857_19@meOtherAttribute' => true,
                                   'suspended' => false
                             ));

            $out = $this->xpdo->getCollectionGraph('prefixClient', '{"Child":{"GrandChild":{"GreatGrandChild":{}}}}', $criteria);

您可以在关系的任何方面设置WHERE,包括当前对象,如悬浮=>中所示.错误的行.

我的书可能会帮助您建立模式和关系.对象的名称应始终为单数,而它们的关系可以为复数(1:M)或单数(1:1).

大佬总结

以上是大佬教程为你收集整理的PHP ORM和优化的关系查询全部内容,希望文章能够帮你解决PHP ORM和优化的关系查询所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: