一对一关联的查询问题

#1 kanchaoyang

user表
1 灰太狼
2 小羊羊
user_detail表
1 不像草原上的王者
2 是一只羊

然后我们用find查找
$conditions = array("user_name"=>"小羊羊");  
$userObj = spClass("user");  
$result = $userObj->spLinker()->find($conditions);  
dump($result);

那么我的条件是 user_tetail 里的"user_type"= "是一只羊";该如何写$conditions?

2010-07-17 18:39:50

#2 jake

看不是很懂楼主的意思,这里说说有两种CONDITIONS,楼主可以看看是否你遇到的问题?
1. 对关联查找结果的附加限制,关联查找本身就是一种限制,限制主表和从表的某字段务必相同,然而附加限制是在上面关联的限制之外,再加入的限制。具体可以看看
http://speedphp.com/post/splinker-hasone.html
的最后一部分:对关联结果的限制
2. 如果只是想查找user_detail表的"user_type"= "是一只羊" 这个条件的结果,直接通过user_detail表来findAll就可以,不需要关联。

2010-07-18 09:57:53

#3 kanchaoyang

老大的第二条符合我的意思,但是,我想得到的结果里还有user表里的name等信息,这就需要把两表关联起来,表1,表2,里的信息我都需要。难道还需建立一个关联,表2是主,表1是从?
 select b.`url`,b.`title`,b.`thumb`,b.`description` from `phpcms_content_position` as a left join `phpcms_content` as b on a.`contentid`=b.`contentid` where a.`posid`=3 and b.`title`=abc  order by b.`contentid` desc


注意a.`posid`=3 and b.`title`=abc  这个条件即可使表1的字段也可以是表2里的字段
我就想知道一对一关联里,如何设置条件是表2里的字段条件?$conditions 如何构造?
不知道我表达清楚没有。

2010-07-18 10:38:41

#4 jake

明白,这里首先是user_detail要设置自己的linker,user_detail作为主表,而user作为从表,这样就可以查询user_detail表然后再关联到user表了。

这里就是一对一关联,在从表里面去做限制字段的条件,那么就是我上面说的:对关联结果的限制。就是将你要在从表执行的$conditions放到这个linker内的conditions里面就行。
具体看看http://speedphp.com/post/splinker-hasone.html 最后一部分,仔细看看那段代码,里面有个condition参数的,这个参数就是在从表的find/findAll的$conditions

2010-07-18 15:57:09