浅析YII2 GridView关联表搜索,排序

我有一个会员表 member 但是这张表记录的信息只有登录账号和密码,另外一张表memdesc是存放头像,姓名,等,这时我需要根据member表的mid
和memdesc的mid关联

首先我们在member表下关联memdesc表
 
public function getMemdesc(){ 
        return $this->hasOne(Memdesc::className(),['mid'=>'mid']); // 这里怎么写,请看文档和结合你的实际表结构,这里是用member的mid去关联memdesc的mid 
    } 
 
当然到这里不是结束
你首先的去写一个MemberSearch去继承Member表,这个可以用gii生成的就不多说了,不会的话就手动吧
就像这样
 
namespace backend\models; 
 
use Yii; 
use yii\base\Model; 
use yii\data\ActiveDataProvider; 
use common\models\Member; 
use common\models\Memdesc; 
 
class MemberSearch extends Member 

    public $nickname;<span style="white-space:pre">   </span>//这里定义一个属性,就是memdesc表的会员姓名 
 
    public function rules() 
    { 
        return [ 
            [['mid'], 'integer'], 
            [['memail', 'musername','nickname'], 'safe'],  //这里nickname一定要写,根据你自己的命名去写,不写的话搜索框出不来 
        ]; 
    } 
 
    public function scenarios() 
    { 
        return Model::scenarios(); 
    } 
     
    public function search($params) 
    { 
        $query = Member::find(); 
        $query->joinWith(['memdesc']); //加上这句 一看就知道这个就是连表的 
 
        $dataProvider = new ActiveDataProvider([ 
            'query' => $query, 
        ]); 
 
        if (!($this->load($params) && $this->validate())) { 
            return $dataProvider; 
        } 
 
        $query->andFilterWhere([ 
            'mid' => $this->mid, 
        ]); 
 
        $query->andFilterWhere(['like', 'memail', $this->memail]) 
            ->andFilterWhere(['like', 'musername', $this->musername]) 
        ->andFilterWhere(['like', 'm_memdesc.nickname', $this->nickname]) ;  //这个就是根据nickname参数进行搜索了,注意前面要加表名 
        return $dataProvider; 
    } 
 
然后再看Controller代码
 
public function actionIndex() 
   { 
       $searchModel = new MemberSearch(); 
       $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 
 
       return $this->render('index', [ 
           'searchModel' => $searchModel, 
           'dataProvider' => $dataProvider, 
       ]); 
   } 

 
接下来就是view了,是不是很开森
 
<?php 
use yii\helpers\Html; 
use yii\grid\GridView; 
?> 
<div class="news-index"> 
    <?php  echo $this->render('_search', ['model' => $searchModel]); ?> //这个先不管它,咱们下回再说这个.. 
    <p> 
  <?= Html::a(Yii::t('app', 'Create {modelClass}', ['modelClass' => 'Member',]), ['create'], ['class' => 'btn btn-success']) ?> 
    </p> 
 
    <?= GridView::widget([ 
        'dataProvider' => $dataProvider, 
       'filterModel' => $searchModel, 
        'columns' => [ 
            ['class' => 'yii\grid\SerialColumn'], 
 
            'memail', 
            'musername', 
         ['label'=>'nickname',  'attribute' => 'nickname',  'value' => 'memdesc.nickname' ],//加上这段代码 
 
            ['class' => 'yii\grid\ActionColumn'], 
        ], 
    ]); ?> 
 
</div> 

时间: 2024-10-06 01:48:26

浅析YII2 GridView关联表搜索,排序的相关文章

Yii中CGridView关联表搜索排序方法实例详解_php实例

本文实例讲述了Yii中CGridView关联表搜索排序方法.分享给大家供大家参考.具体实现方法如下: 在Yii CGridView 关联表搜索排序实现方法有点复杂,今天看了一老外写的了篇游戏,下面我整理一下与各位朋友分享一下,相信会对大家Yii框架的学习有所帮助. 首先,检查你的blog demo里的protectedmodelsComment.php,确保Comment模型有一个search的方法,如果没有,就用gii生成一个,我下载到的blog demo里倒是没有. 然后,写代码的时间到了,

浅析Yii2 GridView实现下拉搜索教程_php实例

废话不多说了,先给大家展示下效果图,如果大家还很满意请继续往下阅读: 具体怎么实现喃?考虑到一张数据表要下拉效果的字段可能有很多个,我们先在其model中实现一个方法方便后续操作 /** * 下拉筛选 * @column string 字段 * @value mix 字段对应的值,不指定则返回字段数组 * @return mix 返回某个值或者数组 */ public static function dropDown ($column, $value = null) { $dropDownLis

浅析Yii2 gridview实现批量删除教程_php实例

在朋友圈里有童鞋向我讨论GridView的问题,有朋友说你用gridview给我去掉表头的链接?我想的很久,用gridview确实不容易实现.有不同见解的朋友欢迎留言.但是呢,这根gridview有个毛线关联啊,明明是要设置ActiveDataProvider,你要我怎么用gridview实现嘛. 这个问题也是很简单的,我们来看看具体实现 $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); $dataProvider->

浅析Yii2 GridView 日期格式化并实现日期可搜索教程_php实例

先给大家展示下日期格式化效果图,如果大家满意请继续往下阅读: 这个我们分情况讨论 1.如果你的数据库字段created_at存的时间格式是date或者datetime,那很简单,gridview中直接输出该字段created_at即可,如上图中右侧所示 2.如果数据库存入的时间戳类型,如上图中左侧所示,则需要像下面这样进行输出 [ 'attribute' => 'created_at', 'value' => function ($model) { return date('Y-m-d H:i

Yii2 ActiveRecord多表关联及多表关联搜索的实现_php实例

Yii的ActiveRecord是与数据库打交道的类,也即MVC中的M(模型层),也是ORM的O(Object). 一个老生常谈的问题.最近通过群里的反馈,觉得很多人还是没有去理解这个问题.今天把这个问题讲明白了,看看yii2 ActiveRecord是怎么个多表关联以及如何去优化这个关联. 场景需求: 假设我们有一张用户表user和一张用户渠道表auth,两张数据表通过user.id和auth.uid进行一对一关联.现需要在user列表展示auth表的来源渠道source,且该渠道可搜索. 首

实例讲解YII2中多表关联的使用方法

前言 本文对 YII2.0 的多表关联查询做一个简单的介绍.文中通过实例代码介绍的非常详细,下面话不多说,来一起看看详细的介绍: 首先先来说明一下表结构 表结构 现在有订单表.用户表.商品清单表.商品库存表 在YII中,如果想直接关联其他表进行查询的话,需要先在模型里定义它们的关联 Order class Order extends \yii\db\ActiveRecord.{ // 关联函数以get+要关联的数据表名来命名 // 这是获取下订单的客户 public function getUs

Yii2中多表关联查询hasOne hasMany的方法

表positionContent id position_id content_title content_id is_recommend list_sort update_time create_time 10 14 大成成长 160910 1 1 2017-02-09 11:51:56 2017-02-09 11:51:56 11 15 创新成长 160910 1 1 2017-02-09 11:52:08 2017-02-09 11:52:08 position表 id name titl

ASP.NET4 GridView的四种排序样式详解_实用技巧

与ASP.NET 的其他Web控件一能够,Gridview控件拥有很多不同的CSS样式属性设置,包括象CssClass,Font字体,ForeColor,BackColor,BackColor, Width, Height等等.Gridview还包括了一些应用在表格的行上的样式属性,比如RowStyle, AlternatingRowStyle, HeaderStyle,和PagerStyle,它们都提供了象CssClass和Font这些基本的属性设置.  在 ASP.NET 4.0中的Grid

Yii2中关联查询简单用法示例_php实例

本文实例讲述了Yii2中关联查询用法.分享给大家供大家参考,具体如下: 有两张表,post和category,post.cate_id对应category.id 使用Gii上升这两张表的model 然后post的model中有如下代码 public function getCate() { return $this->hasOne(Category::className(), ['id' => 'cate_id']); } 在post这个model最下面在添加如下方法即可获取关联表内容 pub