Yii2.0-advanced-6—联表查询加搜索分页
2017-01-06 13:48
375 查看
Yii2.0中使用联表查询有两种办法,第一种是查询构建器(Query Builder),第二种使用活动记录(Active Record),中文网对查询构建器讲的很详细,AR则说的不够详细,下面贴出在yii2.0高级模板下联表查询及分页设置和前端显示方法,以供参考。
两个表
{{%article}} 和 {{%column}}
article.column_id关联column.id
1、要使用AR做关联查询,首先在models {Article} 中创建关联:
2、在 ArticleSearch 中使用,
首先rule中要加上 column_name 字段验证,这让index中显示顶部的搜索表单
或者在控制器中这么写:
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,
]);
}
加上联表查询语句:
加上模糊查询条件和字段排序:
3、在view中使用:
两个表
{{%article}} 和 {{%column}}
article.column_id关联column.id
1、要使用AR做关联查询,首先在models {Article} 中创建关联:
class Article extends \yii\db\ActiveRecord { //这里声明被关联字段 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' => 'yii\grid\ActionColumn'], ], ]); ?>
相关文章推荐
- php进程占用大量cpu优化
- Mac 配置 php-fpm 时出现'/private/etc/php-fpm.conf': No such file or directory (2)
- PHP中的header()函数作用
- phpStudy2016 配置多个域名期间遇到的问题
- 特殊字符<200b><200c><200d>的删除办法与原理
- thinkphp 截取字符串
- 基于thinkPHP类的插入数据库操作功能示例
- Yii POST数据时因启用Csrf出现的400错误
- yii2学习之CSRF验证
- 开发必备--Laravel代码追踪、自动补全插件--ide-helper
- PHP面向对象自动加载类文件
- PHP 日期转换为时间戳 strtotime 与 mktime 函数
- 【PHP兴趣部落-09】递归转义
- PHP 文件上传后端处理实用技巧方法
- PHP数组函数总结
- PHP时间戳 strtotime()使用方法和技巧
- php几种运行模式
- php 解析do后缀文件
- putty提供的两个文件传输工具PSCP、PSFTP详细介绍
- YII2.0打印sql语句方法