企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 多表关联一对多查询之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()`方法,确定他们的关联关系。