为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
ABOUTYOU 2021-11-05 10:27:29
我用 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]);
查看完整描述

3 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

您正在使用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]);


查看完整回答
反对 回复 2021-11-05
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

假设您在和之间存在一对多关系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()的文档。


查看完整回答
反对 回复 2021-11-05
?
慕的地10843

TA贡献1785条经验 获得超8个赞

请注意每个方法的返回值:

  • 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 实例数组。(匹配指定主键值或一组列值的活动记录模型列表。)


查看完整回答
反对 回复 2021-11-05
  • 3 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信