一对多查询出问题了,急求解!!!!!

#1 linvx

以下是我的数据表结构:
活动表   
    [ty_party_table]
    pid     活动ID
    fid     父ID
    cid     分类ID
    pyear     年份
    pmonth     月份
    title     标题
    pjj     描述
    content     活动内容
    ptime     发布时间
    zt     属性:0-合格,1-不合格
    uid     发布信息用户ID
地区表  
    [ty_area_table]
    cid    区域ID
    fid    父ID
    cname    类别名称
class m_area extends spModel{
        var $pk = 'cid';
        var $table = 'area_table';
        var $verifier = array(
                "rules" => array(
                        'catename' => array(
                                'notnull' => true,
                                )
                        ),
                "messages" => array(
                        'catename' => array(
                                'notnull' => '【分类名称】不能为空!'
                                )
                        ),       
        );
        //关联活动详细表
        var $linker = array(
                array(
                        'type'=>'hasmany', //一对一关联
                        'map'=>'tj', //关联标识
                        'mapkey'=>'cid', //本表的关联字段
                        'fclass'=>'m_party', //对应表的类名
                        'fkey'=>'cid', //对应表的关联字段
                        'enabled'=>TRUE, //启用关联
                ),
        );       
}
重点注意:
                        $conditions_tj = array('fid'=>$cid,'pyear'=>$pyear,'pmonth'=>$pmonth);                        
                        $this->tj_info = $tj_info = $obj_area->spLinker()->findAll($conditions_tj);

然后报错::::::
SELECT * FROM ty_area_table WHERE fid = '2' AND pyear = '2012' AND pmonth = '03' ORDER BY cid
执行错误: Unknown column 'pyear' in 'where clause'


2012-03-07 15:59:58

#2 linvx

主要错误在于,条件上边的,字段名称混乱了,无法区分主表与从表!!!!

2012-03-07 16:01:42

#3 jake

其实可以这样说,$obj_area->spLinker()->findAll($conditions_tj); 还是在查询area(condition是area的条件),也就是地区表。因为它是通过area的对象启动的。

如果你希望查询[活动表]里面的某个字段,那么有两个方案你可以做的:

1. 用[活动表]进行查询,关联地区表。就是反过来操作。
2. 使用限定条件,参考手册《关联结果的限制》http://www.speedphp.com/model-linker-limit.html
加入从表的condition

2012-03-07 23:03:16

#4 linvx

jake 发表于 2012-3-7 23:03
其实可以这样说,$obj_area->spLinker()->findAll($conditions_tj); 还是在查询area(condition是area的条 ...

一语惊醒梦中人,
我昨天真是进入死胡同了!!!!!!!!
{:soso_e179:}[img]http://cache.soso.com/img/img/e179.gif[/img][img]http://cache.soso.com/img/img/e179.gif[/img][img]http://cache.soso.com/img/img/e179.gif[/img][img]http://cache.soso.com/img/img/e179.gif[/img][img]http://cache.soso.com/img/img/e179.gif[/img][img]http://cache.soso.com/img/img/e179.gif[/img][img]http://cache.soso.com/img/img/e179.gif[/img][img]http://cache.soso.com/img/img/e179.gif[/img][img]http://cache.soso.com/img/img/e179.gif[/img][img]http://cache.soso.com/img/img/e179.gif[/img][img]http://cache.soso.com/img/img/e179.gif[/img][img]http://cache.soso.com/img/img/e179.gif[/img][img]http://cache.soso.com/img/img/e179.gif[/img][img]http://cache.soso.com/img/img/e179.gif[/img]

2012-03-08 11:19:29