Yii2:如何获取其属性在数组中的记录?

我用 Yii2 建立了一个网站,并尝试获取其类别可用的记录。我已经获得了可用的类别并将它们存储在一个数组中。但是当我尝试在下一个查询中使用 'in' 条件时,它什么也没返回。我确信数据库记录是正确的。


// Get active categories

$active_cat = Category::find()

              ->where(['status' => SystemCode::STATUS_ACTIVE])

              ->andwhere(['is_deleted' => 0])

              ->select(['id'])

              ->asArray()

              ->all();


// Get available articles

$query = Articles::find()

         ->where(['in', 'cat_id', $active_cat]);


ABOUTYOU
浏览 168回答 3
3回答

慕少森

您正在使用all()获取类别列表,这将为您提供格式的行数组:[    ['id' => 1],    // ...],但是对于您的下一个查询,您需要一个简单的 ID 列表 - 您可以通过使用column()方法来实现这一点:// Get active categories$active_cat = Category::find()              ->where(['status' => SystemCode::STATUS_ACTIVE])              ->andWhere(['is_deleted' => 0])              ->select(['id'])              ->column();// Get available articles$query = Articles::find()         ->where(['in', 'cat_id', $active_cat]);

饮歌长啸

假设您在和之间存在一对多关系Articles,Category定义如下:/** * @return \yii\db\ActiveQuery */public function getCategory(){    return $this->hasOne(Category::class, ['id' => 'cat_id']);}您可以获得所有Articles记录,status = SYSTEM_CODE::STATUS_ACTIVE如下所示:$articles = $query = Articles::find()->joinWith('category')    ->where([        'category.status' => SYSTEM_CODE::STATUS_ACTIVE,        'category.is_deleted' => 0    ])->all();相反,如果关系是多对多的,它的定义如下:/** * @return \yii\db\ActiveQuery */public function getCategories(){   return $this->hasMany(        Category::className(),         ['id' => 'cat_id'])->viaTable(          'article_category', ['article_id' => 'id']        );}然后你可以得到这样的结果:$articles = $query = Articles::find()->joinWith('categories')    ->where([        'category.status' => SYSTEM_CODE::STATUS_ACTIVE,        'category.is_deleted' => 0    ])->all();在第二个示例中,只有关系的名称发生了变化。请注意,我做了一些假设,比如category表的名称是category,被调用的连接表article_category等等,您可能需要修改示例以适合您的代码。joinWith()的文档。

慕的地10843

请注意每个方法的返回值:one() 此方法返回一个 ActiveRecord 对象,如果未找到则返回 null。one() 执行查询并返回单行结果。all()此方法返回 ActiveRecord 对象列表或空数组(如果未找到)all() 执行查询并将所有结果作为数组返回。所以在all()方法中:foreach($active_cat as $cat){   # code...}这里当然可以通过“关系数据”访问第二张表asArray()是否以数组形式返回查询结果,而不是以活动记录形式返回。还:yii\db\ActiveRecord::findOne():返回一个填充了查询结果第一行的 Active Record 实例。(通过主键或列值数组返回单个活动记录模型实例)yii\db\ActiveRecord::findAll():返回填充了所有查询结果的 Active Record 实例数组。(匹配指定主键值或一组列值的活动记录模型列表。)
打开App,查看更多内容
随时随地看视频慕课网APP