## 多表关联一对多查询之hasMany
典型demo是文章与分类表之间的关系,一篇文章所属一个分类,一个分类下可能有多篇文章。如下:获取分类下的文章。
```php
// $category = Category::findOne(2);
// $articles = Article::find()->where(['category_id'=>$category->id])->all();
$articles = $category->hasMany(Article::className(), ['category_id'=>'id'])->all();
```
或者将`hasMany()`方法放在`Category`模型中,如下:
```php
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Category extends ActiveRecord
{
public function getArticles()
{
return $this->hasMany(Article::className(), ['category_id'=>'id']);
}
}
```
定义好上述关联关系以后,接下来我们获取的方式是:
```php
$category = Category::findOne(2);
$articles = $category->getArticles()->all();
```
或者是通过访问属性的方式:
```php
$category = Category::findOne(2);
$articles = $category->articles;
```
## 多表关联之一对一查询hasOne
比如:获取文章的分类信息。
```php
$article = Article::findOne(['id'=>1]);
$category = $article->hasOne(Category::className(),['id'=>'category_id'])->one();
```
或者将`hasOne()`方法放在`Article`模型中,如下:
```php
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Article extends ActiveRecord
{
public function getCategory()
{
return $this->hasOne(Category::className(),['id'=>'category_id']);
}
}
```
定义好上述关联关系以后,接下来我们获取的方式是:
```php
$article = Article::findOne(1);
$articles = $article->getCategory()->one();
```
或者是通过访问属性的方式:
```php
$article = Article::findOne(1);
$category = $article->category;
```
### 使用`with()`获取关联查询数据
在查询文章列表中,我们可能会需要关联出文章的分类id,那么我们可以使用`with()`方法进行关联查询。
```php
$articles = Article::find()->with('category')->asArray()->all();
```
> 需要首先在`Article.php`模型中定义`getCategory()`方法,确定他们的关联关系。
- 开始
- Yii2开发小技巧
- Yii2使用不同的方式进行邮件发送逻辑处理
- Yii2 Serialization of 'Closure' is not allowed 错误
- Yii创建应用
- Yii应用结构和流程
- Yii的路径别名
- Yii的请求
- Yii的响应
- Sessions 和 Cookies
- Yii自定义全局工具函数
- Yii2模型
- Yii2视图
- Yii2控制器
- 大数据节省内存处理
- 关联查询hasMany、hasOne
- Yii2 URL地址美化
- Yii2整合AdminLTE后台主题
- Yii2模型中的场景
- Yii2中的RBAC
- Yii2项目后台整合yii2-admin模块
- RBAC集成AdminLTE后台主题对菜单进行控制
- Yii2自定义Gii模板
- 修复AdminLTE引用外部字体文件导致访问变慢的情况
- Yii2事件简单使用
- Yii2模型事件
- Yii2使用GridView新增操作按钮
- Yii2向loyout模板文件中传值
- Yii2数据缓存
- Yii2缓存
- Yii2数据缓存之增删改查
- Yii2拓展
- Yii2日期时间插件-datetimepicker
- kartik-v/yii2-widget-fileinput上传插件