【发布时间】:2020-01-28 16:20:28
【问题描述】:
我有以下 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 始终为空,即使数据库中有数据。
如果我取出$query->innerJoinWith('mainboard'); 的行,$dataProvider->models[0]->mainboard 会正确显示相关模型(实际上在 db 中有一个)。谁能告诉我,为什么我加入mainboard时,$dataProvider中的相关模型设置不正确?
【问题讨论】:
-
在计算机类中,您应该有一个名为 getMainboard() 的关系,它将定义关系。
mainboard在这种情况下不是表名,而是关系名。
标签: yii2 dataprovider