日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

yii多表查询--学习随笔

發(fā)布時(shí)間:2023/12/13 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 yii多表查询--学习随笔 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天自己做一個(gè)小demo,為了不要冗余字段,需要進(jìn)行多表聯(lián)合查詢、搜索

yii中,用model來映射數(shù)據(jù)庫(其實(shí)好多框架都是這么搞的),一個(gè)模型類通常有一個(gè)search模型類跟著一起

廢話不多說了,首先,數(shù)據(jù)庫里有布置一張表,我習(xí)慣讓數(shù)據(jù)表之間相互獨(dú)立,建表的時(shí)候沒有添加外鍵約束,而是采用?u_id、a_id?等字段來表示關(guān)聯(lián)關(guān)系;

下圖是我設(shè)計(jì)表格中常常包括的字段

上面的表為一個(gè)join報(bào)名表,u_id是報(bào)名用戶的id,j_id是報(bào)名項(xiàng)目的id,a_id是該項(xiàng)目負(fù)責(zé)人的id,分別關(guān)聯(lián)了三張表

通過Gii生成的默認(rèn)首頁表單不包括其他三張表的內(nèi)容,這里不贅述,要實(shí)現(xiàn)如下效果:

需要對(duì)如下幾個(gè)文件進(jìn)行修改:

  • 本頁對(duì)應(yīng)model、修改是增加相應(yīng)的get方法
  • 對(duì)應(yīng)的modelSearch、修改是把關(guān)聯(lián)加進(jìn)去,用于搜索
  • 首頁視圖的修改,替換原來的U ID、J ID、A ID等
  • 一、修改model,增加get方法

    yii中,get方法實(shí)際上可以理解成往model對(duì)象中增加新的屬性、方法,也就是添加與其他表的映射關(guān)系

      /*** 根據(jù)u_id獲取用戶信息*/public function getUser(){return $this->hasOne(User::className(), ['id' => 'u_id']);}

    二、修改modelSearch,加入關(guān)聯(lián)查詢

    ...其他代碼...//增加成員屬性(增加的查詢字段)public $real_name;
    //在ruler規(guī)則中添加
    [['real_name'], 'safe'], //在search方法中
    ... //增加查詢表 也就是要和哪張表一起查
    $query->joinWith(['user']);

    ... $query->andFilterWhere(['like', 'user.real_name', $this->real_name]);
    ...

    //設(shè)置搜索同時(shí)給新增的選項(xiàng)添加排序規(guī)則
    //注意是重寫,所以要加上原來有的項(xiàng)目


    $dataProvider->setSort(['attributes' => [
          
    'id',
          'expectation',
          'work_time',
          'status',
          'real_name' => [
            'asc' => ['user.real_name' => SORT_ASC],
            'desc' => ['user.real_name' => SORT_DESC],
            'label' => 'user.real_name' ],
          ]
         ]
        ]);

    return $dataProvider;

    setSort是為在首頁表上顯示的字段提供排序的規(guī)則,它自己的有,新加入的需要添加一下,會(huì)覆蓋原有的,所以模型本來的字段不能漏,否則無法按該字段排序

    三、修改view

    看代碼,這個(gè)是視圖文件中的index.php文件,也就是修改GridView

    <?= GridView::widget(['dataProvider' => $dataProvider,'filterModel' => $searchModel,'columns' => ['id',//'u_id', ['attribute' => 'real_name','value' => 'user.real_name','label' => '用戶'],'expectation','work_time','status',['class' => 'yii\grid\ActionColumn'],],]); ?>

    這樣就可以搜索了,也可以排序的哦

    文筆不好,有不妥當(dāng)之處歡迎交流 ^_^

    轉(zhuǎn)載于:https://www.cnblogs.com/huyujun/p/9604333.html

    總結(jié)

    以上是生活随笔為你收集整理的yii多表查询--学习随笔的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。