Yii2-未设置与dataProvider相关的模型

问题描述 投票:0回答:2

我有以下SearchModel ComputerSearch,在这里我进行查询的联接(我必须过滤相关表的字段):

class ComputerSearch extends Computer {

  public function search($params) {
      $query = Computer::find();
      $query->innerJoinWith('mainboard');

      $dataProvider = new ActiveDataProvider([
          'query' => $query,
      ]);

      $this->load($params);

      if (!$this->validate()) {
          return $dataProvider;
      }

      return $dataProvider;
  }
}

[当我用var_dump($query->createCommand()->rawSql);打印查询并执行输出时,我将获得计算机和主板的所有数据(其1:1关系!)。

但是:$dataProvider->models[0]->mainboard始终为null,即使数据库中有数据。如果我用$query->innerJoinWith('mainboard');删除行,则$dataProvider->models[0]->mainboard正确显示了相关模型(实际上在db中有一个)。谁能告诉我,为什么加入$dataProvidermainboard中的相关模型设置不正确?

yii2 dataprovider
2个回答
0
投票
`$dataProvider->models[0]->mainboard` this will give you only result
第一记录,并且computer的第一记录可能会没有mainboard或使用loop打印数据,或使用$dataProvider->getModels(),您将在每个计算机数据中找到关系数据。

主板应该与计算机有联系,例如:在计算机模型中:

public function getMainboard(){ return $this->hasMany(Mainboard::className(), ['computer_id', 'id']); }

0
投票
这可能是Yii框架的错误:)我有同样的问题:

    尝试通过Join方法而不是INNER JOIN使用FULL OUTER JOIN
  • $ query-> join(Computer :: tableName(),Computer :: tableName()。'.id ='='。Mainboard :: tableName()。'.id')或类似的东西
© www.soinside.com 2019 - 2024. All rights reserved.