`
dcj3sjt126com
  • 浏览: 1868263 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在GridView中对于有外键的字段使用关联模型进行搜索和排序

    博客分类:
  • YII
yii 
阅读更多

在GridView中使用关联模型进行搜索和排序

首先我们有两个模型它们直接有关联:

class Author extends CActiveRecord {
...
}
 
class Post extends CActiveRecord {
...
    function relations() {
        return array(
            'author'=>array( self::BELONGS_TO, 'Author', 'id_author' ),
        );
    }
...
}

当以网格形式显示所有 Post 时,我们希望显示作者的名字,并且可以通过作者名字中的关键字过滤 Post。提供这些功能的最好解决方式(在我看来)是:

首先需要在 Post 模型中添加一个新的属性,它用来保存搜索的字符串(即要搜索的作者名).也可以使用外键列来实现同样的效果,但是我不喜欢这么用,在搜索条件中保存搜索的字符串而不是外键 id.你还须在搜索条件中将这个新的属性的规则设置为 safe

class Post extends CActiveRecord {
  public $author_search;
  ...
  public function rules() {
    return array(
      ...
      array( 'xxx,yyy,author_search', 'safe', 'on'=>'search' ),
    );
  }
}

现在就可以在搜索条件(标准情况-每个模型都要一个 search 方法)中使用这个属性了。同时,我们需要使用条件的 ‘with’ 属性来指定我们的 Post 是通过哪个关系来获取作者(这种方式只需一次数据库查询而不是延迟加载中的多次查询)。

$criteria = new CDbCriteria;
$criteria->with = array( 'author' );
...
$criteria->compare( 'author.username', $this->author_search, true );
...

当我们修改搜索函数时,我们对返回的 CActiveDataProvider 添加一个新的功能

return new CActiveDataProvider( 'Post', array(
    'criteria'=>$criteria,
    'sort'=>array(
        'attributes'=>array(
            'author_search'=>array(
                'asc'=>'author.username',
                'desc'=>'author.username DESC',
            ),
            '*',
        ),
    ),
));

配置中排序部分的 attributes 允许我们覆盖默认值。当我们按 author_search 字段排序的时候,它将会按照指定的规则排序,最后的 * 表示其他字段按默认排序。通过这种方式我们也可以修改默认属性的排序(例如:用户指定按 last_name 列排序时,应该使用last_name和first_name结合排序).

到现在为止我们已经为我们的网格显示做好了前期准备

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        'title',
        'post_time',
        array( 'name'=>'author_search', 'value'=>'$data->author->username' ),
        array(
            'class'=>'CButtonColumn',
        ),
    ),
));

这就是所有,我们使用用户名代替用户ID外键列来排序,并且我们可以使用姓名关键字搜索.

分享到:
评论

相关推荐

    .NET中GridView中添加超链接字段和属性值,并向另一页中传递参数

    在这个场景中,我们需要在GridView中添加超链接字段,以便用户点击后能跳转到另一个页面,并传递特定的参数。这涉及到几个关键的知识点,包括但不限于HTML渲染、事件处理以及URL路由。 首先,让我们了解如何在...

    Yii2-GridView 中让关联字段带搜索和排序功能示例

    4. 如果需要对关联模型的字段进行搜索,可以在模型的`search`方法中使用`joinWith`方法来关联需要搜索的模型。然后在搜索条件中添加过滤条件。 知识点五:关联字段的实现方法 在Yii2中,对于关联模型的字段,需要...

    在标准的三层架构中用GridViwe显示数据库外键的数据

    5. **绑定字段和显示外键数据**:在GridView中,为每个字段设置DataField属性,对于外键字段,可以使用TemplateField来显示关联的详细信息。例如,对于`CustomerId`字段,可以创建一个TemplateField,然后使用...

    arcgisserver中gridview隐藏字段

    GridView是ASP.NET中的一个控件,用于显示来自数据源的数据,并允许用户进行排序、分页和编辑。在ArcGIS Server中,它通常与ArcGIS服务结合,用于显示地图服务或地理处理服务返回的属性数据。 隐藏字段涉及到对数据...

    在GridView中使用DropDownList模板列.doc

    总结,这个教程详细解释了如何在GridView中使用模板列和DropDownList,以及如何处理外键关联的数据。对于初学者来说,这是一个很好的实践项目,可以帮助理解ASP.NET中数据绑定和编辑功能的实现。通过这种方式,...

    Dev GridView 拖拽行进行排序

    通过分析和运行这些代码,你可以更深入地理解如何在实际应用中实现Dev GridView的拖拽行排序功能。 总的来说,实现Dev GridView的拖拽行排序涉及多个事件的处理和数据源的动态调整。这个特性增强了用户交互性,使得...

    怎么获得gridview 字段值

    ### 如何在ASP.NET中获取GridView字段值 在ASP.NET Web应用程序中,`GridView`控件是一种非常常用的数据展示方式,它可以将数据源中的数据以表格的形式显示出来,并且提供了强大的自定义功能,如排序、分页等。本文...

    gridview的排序和分页功能

    在ASP.NET开发中,GridView控件是一个非常常用的数据展示组件,尤其在Web应用程序中,它能够方便地显示和操作数据库中的数据。本程序的核心在于利用C#语言来实现GridView的排序和分页功能,这对于提高用户体验和提升...

    在GridView中使用MVC的例子

    在ASP.NET MVC框架中,GridView控件通常用于展示数据,特别是在需要进行数据排序、分页和筛选时。这个例子将深入探讨如何在MVC模式下有效地利用GridView来处理和显示数据。 首先,GridView控件在ASP.NET Web Forms...

    GridView排序类完整代码

    在.NET框架中,GridView控件是ASP.NET网页开发中常用的一种数据展示工具,它能够方便地展示数据库或其他数据源中的数据,并提供了丰富的功能,如分页、排序、筛选等。本篇文章将深入探讨如何实现GridView的排序功能...

    GridView正反排序(C#)

    标题“GridView正反排序(C#)”明确指出本文将探讨如何在ASP.NET Web Forms项目中使用C#语言实现`GridView`控件的排序功能。这里的“正反排序”通常指的是升序(Ascending,简称ASC)和降序(Descending,简称DESC)...

    在ASP.NET 2.0中操作数据之二十七:创建自定义排序用户界面

    本文主要探讨了如何在*** 2.0中使用GridView控件创建一个能够自定义排序的用户界面,并着重讲解如何在相同类别的数据前添加分界行来提升用户体验。 首先,要创建一个能够排序的GridView,需要设置GridView控件的...

    GridControl中嵌套GridView的使用

    4. **数据绑定**:子GridView的数据源通常与主GridView中的某一列关联,可以通过主键-外键关系实现。在`CustomRowCellEdit`事件中,根据主GridView当前行的数据,找到对应的子级数据并绑定到子GridView。 5. **事件...

    gridview使用技巧、gridview使用大全、gridview常用问题、gridview常用方法

    在本文中,我们将深入探讨GridView的使用技巧、大全、常见问题以及常用方法,旨在帮助开发者更好地理解和应用这一强大的工具。 1. GridView简介: GridView控件允许用户以表格的形式显示数据,通常与数据源(如...

    GridView排序

    本示例展示了如何在ASP.NET Web Forms应用中使用GridView控件进行服务器端排序。通过处理`Sorting`和`Sorted`事件,可以实现对数据的有效管理与展示。此外,还可以根据实际需求自定义更多功能,如添加图标指示排序...

    GridView内嵌套使用GridView

    在本项目中,我们探讨的主题是“GridView内嵌套使用GridView”,这通常是为了实现更复杂的数据显示,例如,当数据有层次关系时,可以通过内嵌套的方式展现这些层次结构。 在Visual Studio 2005环境下,开发人员可以...

    GridView行中按钮的使用

    在ASP.NET开发中,GridView控件是一个非常常用的用于显示...以上就是关于在ASP.NET中使用GridView控件添加行内按钮以及处理行操作的基本知识。在实际应用中,可能还需要考虑错误处理、权限验证和其他用户体验优化措施。

    GridView查询排序分页

    在本教程中,我们将深入探讨如何实现GridView查询排序和分页功能。 首先,GridView控件的核心在于它与数据源的绑定。在ASP.NET中,我们通常会使用SQLDataSource、ObjectDataSource或EntityDataSource等数据源控件来...

    GridView实现正反双向排序功能

    在实际的网页开发中,用户可能需要对显示的数据进行正反双向排序,即点击列头可以按照升序或降序对数据进行排序。本篇文章将详细介绍如何在GridView中实现这种功能。 首先,我们需要在页面上添加一个GridView控件,...

Global site tag (gtag.js) - Google Analytics