Yii2 GridView 显示"(not set)" dataProvider 是否包含 GROUP BY 和 INNER JOIN



我显示(仅显示,不完成 CRUD(查询的结果,该查询构建如下:

SELECT SUM(a) AS ab, b, COUNT(*) as C
FROM x
INNER JOIN y
ON y.a = x.a
WHERE b=123
GROUP BY b

所以我在SearchModelsearch()方法中使用 ActiveRecord 构建了这个查询。
在表 a 的模型中,我添加了一个hasOne()关系。

为了显示此查询的数据,我使用的是 GridView。在它的列数组中,我使用y.b等等......

我的问题:表 x 中的列显示正确,但对于表 y 中的每个"连接列",它都会显示(未设置(。
如果我打印 by ActiveRecord 生成的查询,并在 sql 客户端中执行它,它会显示所有数据。
我想这取决于模型primaryKey()功能,但我无法更改它以使表格正常工作。是否有人知道我的问题的解决方案,或者为什么 dataProvider/GridView 会处理所选模型(在本例中为表 x 的模型(primaryKey()方法(或如何使 dataProvider/GridView 忽略primaryKey()

在模型中,您应该使用关系模型创建关系方法。 例如:

class Patient extends ActiveRecord
{
public function getOrders()
{
return $this->hasMany(Order::class, ['patient_id' => 'id']);
}
}
class Order extends ActiveRecord
{
public function getPatient()
{
return $this->hasOne(Patient::class, ['id' => 'patient_id']);
}
}

对于访问数据:

// SELECT * FROM `patient` WHERE `id` = 1
$patient = Patient::findOne(1);
$orders = $patient->orders;

最新更新