如何将条件添加到我的文章模型中,以便slug(来自类别模型)等于$ slug?
这是Gii生成的函数:
public function getCategory()
{
return $this->hasOne(Categories::className(), ['id' => 'category_id']);
}
这是我的代码:
public function specificItems($slug)
{
$query = Articles::find()->with('category');
$countQuery = clone $query;
$pages = new Pagination(['totalCount' => $countQuery->count(),'pageSize' => 12]);
$articles = $query->offset($pages->offset)
->limit($pages->limit)
->all();
return ['articles' => $articles,'pages' => $pages];
}
答案 0 :(得分:1)
您的SQL查询应包含文章和类别表中的列。为此,您需要使用joinWith()
。
$result = Articles::find()
->joinWith('category')
->andWhere(['category.slug' => $slug])
->all();
其中'类别'然后是您的类别表的名称。
但是,在您的代码中,您偏离了某些最佳做法。我建议如下:
以单数形式(Article
和article
)同时拥有表名和模型类。如果文章有多个类别,则关系可以是复数形式,如getCategories
。
避免返回结果集的函数。更好地返回ActiveQuery类。如果您有查询对象,那么获取实际模型所需的只是->all()
。但是,您可以进一步操作此对象,添加更多条件,更改结果格式(->asArray()
)和其他有用的东西。返回结果数组不允许这样做。
考虑将ActiveQuery
类扩展到ArticleQuery
并在那里实施条件。然后,您就可以执行Article::find()->joinWith('category')->byCategorySlug('foo')->all()
。