回答

收藏

使用Propel的addMultipleJoin

技术问答 技术问答 64 人阅读 | 0 人回复 | 2023-09-13

在关于子选择的最后一个问题之后,我在联系中有多个条件SQL语句如下:: e/ w0 B! Z. ~! K% m( O9 A
SELECT * FROM personLEFT OUTER JOIN group_membership  ON person.id = group_membership.person_id  AND group_id = 1WHERE group_membership.person_id is null;不幸的是,Propel(我与Symfony一起使用的ORM)它似乎不擅长使用多个连接,以前的人试图将标准结合起来以达到结果。Propel感到困惑,开始使用CROSS
# ~& S/ a; ]) kJOINs。根据我的阅读,这是因为Propel第二个参数的字段无法识别ID:
( A3 Y3 b  B9 T$criteria->addJoin(self::ID,GroupMembershipPeer:ERSON_ID . ' AND ' .    GroupMembershipPeer::GROUP_ID . '=' . $group_id,   Criteria:EFT_JOIN);然后,我发现了Propel5 i7 T( @% a& ]' X5 M
1.4的addMultipleJoin()方法,在某种程度上似乎可以正常工作。我不完全理解它,或者我怎么称它为我想要的:
7 i: F. u$ K( j" o! o! v0 q+ }" `$criteria->addMultipleJoin(array(  array(   left' => self::ID,   'right' => GroupMembershipPeer:ERSON_ID,   'operator' => Criteria::EQUAL  ),  array(   left' => GroupMembershipPeer::GROUP_ID,   'right' => $group_id,   'operator' => Criteria::EQUAL ),Criteria:EFT_JOIN);这导致了一些奇怪的事情SQL:7 _9 T; r  ?+ l$ j
SELECT DISTINCT FROM `person` CROSS JOIN `group_membership` LEFT JOIN ON (= AND =) WHERE person.ID IN  AND group_membership.PERSON_ID IS NULL LIMIT 10PHP一些奇怪的错误:
4 Q6 `  m% }8 @5 O7 o+ K: xNotice: Undefined offset: 0 in /path/lib/vendor/symfony/lib/plugins/sfPropelPlugin/lib/vendor/propel/util/Criteria.php on line 675谁知道这是我自己还是我自己?Propel我该怎么解决错误的事情,或者完成我需要的事情?
6 h* R3 P) k5 t* U& ~) H$ Z; J; [                                                               
/ \) ?$ L; k- l    解决方案:                                                               
8 W' X8 `- U0 F& ]4 W                                                                也许我错了,但你为什么不用这种东西呢:
  e& w9 _! G! G) F5 U$c->addJoin(array(self::ID,GroupMembershipPeer::GROUP_ID),array(GroupMembershipPeer:ERSON_ID,$group_id) );自Propel3 C9 l4 [) d; i
1.条件支持多种连接条件。条件文件
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则