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"],
],
]); ?>
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
