我有以下的索引操作代码
$searchModel = new PatientTestSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
]);
PatientTestSearch中的搜索功能
$query = PatientTest::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => ['pageSize' => $pagination],
'sort' => ['defaultOrder' => ['created_at' => SORT_DESC]]
]);
$query->joinWith('patient');
$query->joinWith('testGroup');
如何在上面的查询中使用group concate和group? 我在控制器的行动中试过这个
$dataProvider->query->groupBy(['patient_id']);
但这会产生以下错误
SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT列表的表达式#1不在GROUP BY子句中,并且包含非聚合列' wizlaboratory.patient_test.patient_id'它在功能上不依赖于GROUP BY子句中的列;这与sql_mode = only_full_group_by
不兼容如果我使用sqldataprovider,那么我就无法使用过滤选项。
答案 0 :(得分:2)
ONLY_FULL_GROUP_BY
模式拒绝查询,其中选择列表,HAVING条件或ORDER BY列表引用既未在GROUP BY子句中命名也未在功能上依赖于(由GROUP BY列唯一确定)的非聚合列
要在数据库级别解决此问题,您可以关闭
通过在mysql中运行此查询来ONLY_FULL_GROUP_BY
模式:
SET GLOBAL sql_mode =(SELECT REPLACE(@@ sql_mode,'ONLY_FULL_GROUP_BY',''));
$query
中解决此问题,请将所有必填字段添加到groupBy()
方法。 ($query->groupBy(['attr1', 'attr2'])
。答案 1 :(得分:1)
我只是更改此查询
$query = PatientTest::find();
到这个
$query = new Query();
$query->select('patient.id as id,patient_test.receipt_number,patient.name as patient_id, GROUP_CONCAT(test_group.name) as test_group_id,
patient.age as patient_test_age,patient.gender as patient_test_gender,patient.mobile_no as patient_test_mobile,patient_test.test_date,patient_test.is_sample_received,
patient_test.datetime')
->from('patient_test');
$query->join = [
['LEFT JOIN', 'patient', 'patient_test.patient_id = patient.id'],
['LEFT JOIN', 'test_group', 'patient_test.test_group_id = test_group.id']];
if ($pid != null && $pid != '') {
$query->where('patient_test.patient_id = ' . $pid);
}
$query->groupBy(['patient_test.patient_id', 'patient_test.receipt_number', 'patient_test.test_date', 'patient_test.datetime', 'patient_test.is_sample_received']);
$query->orderBy('patient.id DESC');
并在下方评论加入查询
//$query->joinWith('patient');
//$query->joinWith('testGroup');
现在一切正常