【问题标题】:Yii Framework 2.0 Active RecordYii 框架 2.0 活动记录
【发布时间】:2014-12-01 14:46:24
【问题描述】:

我正在使用 Yii 框架 2.0,我有一个如下所示的数据库表。

id   active   key
 1   0        xx
 2   1        xx
 3   0        zzz
 4   0        wwww
 5   1        wwww   
 6   1        qqqqq   

我想得到'active'为1的记录,'key'与'active'为0的记录的'key'相同。我想要的结果是

 id   active   key
  2   1        xx
  5   1        wwww

这个问题可能不太容易理解,所以我放了下面的代码示例来支持这个问题。这段代码给了我想要的结果。

$allModel = Model::find()->where(['active' => 0])->all();

$arrModelActive1 = [];

foreach($allModel as $model) {
     $modelActive1 = Model::find()->where['active' => 1, 'key' => $model->key]->all();

     $arrModelActive1[] = $modelActive1;
}

return $arrModelActive1;

我可以使用上面的代码示例解决这个问题,但问题是我在 foreach 循环内执行查询,这可能会降低性能。所以我正在寻找 Yii 2.0 可能提供的连接或急切加载解决方案,它可以使用同一张表或所谓的自连接操作。

【问题讨论】:

    标签: php join yii eager-loading yii2


    【解决方案1】:

    示例: 您的关系为public function getTest() { return $this->hasMany(self::className(), ['key' => 'key']) ->where('active = :active', [':active' => 1]); }

    然后您必须选择活动字段 == 0 的项目

    $model = Model::find(['active' => 0])->all(); var_dump($model->test);
    

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多