SpeedPHP技术交流论坛

 找回密码
 论坛注册

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 1134|回复: 13

findall(),有这种情况的条件怎么写 [复制链接]

Rank: 4

发表于 2010-8-26 16:06:54 |显示全部楼层
示例中有这么一段
$conditions = array("user_name"=>"小羊羊");这个是主表中的条件,(如果是从表中的呢?)
$userObj = spClass("user");
$result = $userObj->spLinker()->find($conditions);
dump($result);

如果那个条件是从表中条件要怎么写

Rank: 6Rank: 6

发表于 2010-8-26 16:33:50 |显示全部楼层
user_id int 用户ID 自增/主键

user_name varchar(50) 用户名 唯一

user_detail 用户详细资料表

user_id int 用户ID 主键

intro varchar(255) 用户个人介绍

从表中已经有了user_id,splinker()会自动,不要写了

Rank: 4

发表于 2010-8-26 20:36:29 |显示全部楼层
$result = $userObj->spLinker()->find($conditions);
$conditions好像只能写主表的条件,如果要写从表的要怎么写。
我说的只是一个例子,也许你们可能不会碰到,可是我刚好碰到了,最后没办法,只好主从表掉换一下

Rank: 6Rank: 6

发表于 2010-8-26 20:39:14 |显示全部楼层
一样写,
表一:userid  username
表二:userid  userage

你说哪个是主表,哪个就是。分不清的。。。

管理员

@speedphp

Rank: 9Rank: 9Rank: 9

发表于 2010-8-26 20:57:52 |显示全部楼层
spLinker的参数'condition'中可以做从表的条件,作为对关联结果的限制
http://speedphp.com/post/splinker-hasone.html

        var $linker = array(
                array(
                        'type' => 'hasmany',
                        'map' => 'ulink',
                        'mapkey' => 'user_id',
                        'fclass' => 'gb',
                        'fkey' => 'user_id',
                        'midclass' => 'user2gb',
                        'sort' => '', 'condition' => '', 'field' => '', 'limit' => '',
                        'enabled' => true, 'countonly' => false
                ),
                array(
                        ...
                )
);

这个参数和findAll的第一个参数$condition是一样使用的方法。

Rank: 4

发表于 2010-8-31 22:23:59 |显示全部楼层
能不能给个具体的,最好能来个从表条件的完整$condition的写法,主表直接字段名就行,从表试了好多种都不行

管理员

@speedphp

Rank: 9Rank: 9Rank: 9

发表于 2010-8-31 22:39:31 |显示全部楼层
var $linker = array(
                array(
                        'type' => 'hasmany',
                        'map' => 'my_detail',
                        'mapkey' => 'user_id',
                        'fclass' => 'user_detail',
                        'fkey' => 'user_id',
                        
                        'enabled' => true,
                ),
);

上面是user主表,user_detail从表的普通写法( $linker在user模型里面,这个是spLinker的基础用法)

然后比如说从表内有个字段叫gerenal(性别)的,然后你关联只想查出男的(gerenal=1)

var $linker = array(
                array(
                        'type' => 'hasmany',
                        'map' => 'my_detail',
                        'mapkey' => 'user_id',
                        'fclass' => 'user_detail',
                        'fkey' => 'user_id',
                        'condition' => array('gerenal'=>1), // 当然还可以加其他条件,或者直接使用字符串作为条件'gerenal=1'
                        'enabled' => true,
                ),
);

如果你想从表按user_id排序的

var $linker = array(
                array(
                        'type' => 'hasmany',
                        'map' => 'my_detail',
                        'mapkey' => 'user_id',
                        'fclass' => 'user_detail',
                        'fkey' => 'user_id',
                        'condition' => array('gerenal'=>1),
                        'sort' => 'user_id DESC',
                        'enabled' => true,
                ),
);

如果你想从表只取intro的

var $linker = array(
                array(
                        'type' => 'hasmany',
                        'map' => 'my_detail',
                        'mapkey' => 'user_id',
                        'fclass' => 'user_detail',
                        'fkey' => 'user_id',
                        'condition' => array('gerenal'=>1),
                        'sort' => 'user_id DESC',
                        'field' => 'intro,user_id', // 当然,主键user_id还是得加上的
                        'enabled' => true,
                ),
);

如果你想从表只取10条记录的

var $linker = array(
                array(
                        'type' => 'hasmany',
                        'map' => 'my_detail',
                        'mapkey' => 'user_id',
                        'fclass' => 'user_detail',
                        'fkey' => 'user_id',
                        'condition' => array('gerenal'=>1),
                        'sort' => 'user_id DESC',
                        'field' => 'intro,user_id', // 当然,主键user_id还是得加上的
                        'limit' => 10,
                        'enabled' => true,
                ),
);

Rank: 4

发表于 2010-9-1 16:54:53 |显示全部楼层
这样是成功了,谢谢,原来只能是在model里写呀,可是在controller里要怎么写呢

管理员

@speedphp

Rank: 9Rank: 9Rank: 9

发表于 2010-9-1 16:59:19 |显示全部楼层
在controller里面可以通过
$userObj->linker[0]['limit'] = 10;
$userObj->linker[0]['condition'] = array(xxx);
$userObj->spLinker()->findAll();
这种方式来写。

不过是不建议在controller里面写,因为数据关联是M层的东西,最好在M层就定义好了。

Rank: 4

发表于 2010-9-1 22:08:58 |显示全部楼层
非常感谢,刚好有好几种情况要查询从表,如果都写在M层,那不是要建好几个model
您需要登录后才可以回帖 登录 | 论坛注册

Archiver|SpeedPHP.com ( 粤ICP备08008671号 )  

GMT+8, 2012-2-7 01:09

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部