Yii2.0中使用联表查询有两种办法,第一种是查询构建器(Query Builder),第二种使用活动记录(Active Record),中文网对查询构建器讲的很详细,AR则说的不够详细,下面贴出在yii2.0高级模板下联表查询及分页设置和前端显示方法,以供参考。
两个表
{ {%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,
],
]);
或者在控制器中这么写: