我有以下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中有一个)。谁能告诉我,为什么加入$dataProvider
时mainboard
中的相关模型设置不正确?
`$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']); }