Yii2.0-advanced-6—联表查询加搜索分页
Yii2.0中使用联表查询有两种办法,第一种是查询构建器(Query Builder),第二种使用活动记录(Active Record),中文网对查询构建器讲的很详细,AR则说的不够详细,下面贴出在yii2.0高级模板下联表查询及分页设置和前端显示方法,以供参考。
两个表
{{%article}} 和 {{%column}}
article.column_id关联column.id
1、要使用AR做关联查询,首先在models {Article} 中创建关联:
class Article extends yiidbActiveRecord { //这里声明被关联字段 column_name 是自建属性,指 column 表中的 name public $column_name; /** * @inheritdoc */ public static function tableName() { return "{{%article}}"; } ... // 在文章模型中关联 column 表 一篇文章属于一个栏目 是一对一关系 用hasOne public function getColumn(){ /** * 第一个参数为要关联的表模型类, * 第二个参数为关联字段 这里是:id 和 column_id */ return $this->hasOne(Column::className(), ["id" => "column_id"]); } }
2、在 ArticleSearch 中使用,
首先rule中要加上 column_name 字段验证,这让index中显示顶部的搜索表单
class BlogSearch extends Blog { /** * @inheritdoc */ public function rules() { return [ [["id", "views","column_id"], "integer"], [["title", "content", "created_at", "updated_at","column_name"], "safe"], ]; }在search方法中加上分页条数设置:pagination参数
public function search($params) { $query = Article::find(); // add conditions that should always apply here $dataProvider = new ActiveDataProvider([ "query" => $query, "pagination" => [ "pageSize" => 5, ], ]);
或者在控制器中这么写:
- public function actionIndex()
- {
- $article = new Article();
- #查询
- $searchModel = new ArticleSearch();
- $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
- #分页
- $dataProvider->pagination = ["pagesize" => "3"];
- return $this->render("index", [
- "dataProvider" => $dataProvider,
- "model" => $article,
- "searchModel" => $searchModel,
- ]);
- }
加上联表查询语句:
//联表查询 $query->joinWith(["column"]); $query->select("article.*,column.name");
加上模糊查询条件和字段排序:
/联表查询条件 $query->andFilterWhere(["like","column.name", $this->column_name]); $dataProvider->sort->attributes["column_name"] = [ "asc"=>["column.id"=>SORT_ASC], "desc"=>["column.id"=>SORT_DESC], ];
3、在view中使用:
<?= GridView::widget([ "dataProvider" => $dataProvider, "filterModel" => $searchModel, "columns" => [ "id", "title", ["attribute"=>"column_name", "label"=>"栏目", "value"=>"column.name", ], "views", "created_at", "updated_at", ["class" => "yiigridActionColumn"], ], ]); ?>
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。