Yii2-未设置与数据提供程序相关的模型

Yii2-未设置与数据提供程序相关的模型,yii2,dataprovider,Yii2,Dataprovider,我有以下SearchModelComputerSearch,其中我对查询进行了联接(我必须筛选相关表的字段): 当我打印查询时,使用var\u dump($query->createCommand()->rawSql)并执行输出,我将获得计算机和主板的所有数据(这是一个1:1的关系!) 但是:$dataProvider->models[0]->mainboard始终为空,即使数据库中有数据。 如果我取出带有$query->innerJoinWith('mainboard')的行,$dataPro

我有以下SearchModel
ComputerSearch
,其中我对查询进行了联接(我必须筛选相关表的字段):

当我打印查询时,使用
var\u dump($query->createCommand()->rawSql)并执行输出,我将获得计算机和主板的所有数据(这是一个1:1的关系!)

但是:
$dataProvider->models[0]->mainboard
始终为空,即使数据库中有数据。 如果我取出带有
$query->innerJoinWith('mainboard')的行
$dataProvider->models[0]->mainboard
正确显示了相关的模型(在db中实际上有一个)。有谁能告诉我,为什么在我加入主板时,
$dataProvider
中的相关型号设置不正确

`$dataProvider->models[0]->mainboard`  this will give you only result 
对于第一条记录,对于
计算机的第一条记录

没有
主板
或者使用
循环
打印数据,或者使用
$dataProvider->getModels()
可以在每台计算机的数据中找到关系数据

主板应与计算机相关,如: 在计算机模型中:

public function getMainboard(){
   return $this->hasMany(Mainboard::className(), ['computer_id', 'id']);
}
对于第一条记录,对于
计算机的第一条记录

没有
主板
或者使用
循环
打印数据,或者使用
$dataProvider->getModels()
可以在每台计算机的数据中找到关系数据

主板应与计算机相关,如: 在计算机模型中:

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

这可能是Yii框架的一个缺陷:) 我也有同样的问题:

  • 尝试对JOIN方法使用完全外部联接,而不是内部联接
  • $query->join(Computer::tableName(),Computer::tableName()。.id='='='.Mainboard::tableName()。.id')或类似的内容

    • 这可能是Yii框架的一个缺陷:) 我也有同样的问题:

      • 尝试对JOIN方法使用完全外部联接,而不是内部联接
      • $query->join(Computer::tableName(),Computer::tableName()。.id='='='.Mainboard::tableName()。.id')或类似的内容
      试试这个


      在计算机类中,您应该有一个名为getMainboard()的关系,它将定义关系
      mainboard
      在本例中不是表名,而是关系名。在计算机类中,您应该具有名为getMainboard()的关系,该关系将定义关系
      mainboard
      在本例中,不是表名,而是关系名。非常感谢,这很好。我希望我能找到一个更好的解决办法$query=Computer::find()->join('FULL OUTER join',Mainboard::tableName(),Mainboard::tableName();非常感谢,很好用。我希望我能找到一个更好的解决办法$query=Computer::find()->join('FULL OUTER join',Mainboard::tableName(),Mainboard::tableName();
      $query = self::find();
      $query->innerJoin(Mainboard::tableName(), 'computer.mainboard_id=mainboard.id')
            ->select('computer.*, mainboard.*');