coquille 2011-07-12 16:22:17 3925次浏览 7条回复 0 0 0

gii CRUD生成的Admin页面上,有一个Advanced Search,一个大表单, 不过缺省只能查询和model相关的一张表的数据,现在涉及表关联查询。

我在考虑两种方案,都还不知道怎样实现,征求大家的意见。 1、在原model上增加字段,把关联表的字段加进来 2、新建一个FormModel,单独做查询

哪一种能实现?怎样实现呢?有没有可参考的例子呢?多谢大家。:)

  • 回复于 2011-07-12 16:27 举报

    你查询几个表的内容?

  • 回复于 2011-07-12 16:57 举报

    多谢舰长,先假定2个。

  • 回复于 2011-07-12 17:33 举报

    你说的是不是CGridView这个东西?如果是的话他有个dataProvider你可以在model里找到个search方法,你可以在这个里面填你要的数据源。。。个人觉得不需要用到你的上面两个方法,修改这个方法应该是可行的。。。

  • 回复于 2011-07-12 17:44 举报

    多谢lostangel,是CGridView上面那个,_search.php对应的区域。

    <?php 
    echo CHtml::link('Advanced Search','#',array('class'=>'search-button')); 
    ?>
    <div class="search-form" >
    <?php $this->renderPartial('_search',array(
      'model'=>$model,
    )); 
    ?>
    </div><!-- search-form -->
    
  • 回复于 2011-07-12 17:51 举报

    那我没什么好办法了,一个比较简单的方法是你在model里造个方法,把你要表现的数据查出来组个数组,然后不要用AR的方法,把数组post到view然后用php原生代码表现出来可能会比较好。。。当然初步设想,可能代码复用性查了点,你可以考虑看看这个思路

  • 回复于 2011-07-12 20:48 举报

    没搞过这个,但是应该修改model里面的search就行了

    public function search()
    {
      $criteria=new CDbCriteria;
      $criteria->compare('title',$this->title,true);
      $criteria->compare('status',$this->status);
      return new CActiveDataProvider('Post', array(
      'criteria'=>$criteria,
        'sort'=>array(
          'defaultOrder'=>'status, update_time DESC',
        ),
      ));
    }
    

    _search.php里面调用了这个方法,你在这个方法里面返回一个join查询的dataprovider就行了3

  • 回复于 2011-07-13 07:07 举报

    多谢诸位,我都试试。:)

您需要登录后才可以回复。登录 | 立即注册