## 多表關聯一對多查詢之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上傳插件