gpt4 book ai didi

php - 为什么 yii 在双内连接查询中省略值?

转载 作者:行者123 更新时间:2023-11-29 14:05:15 24 4
gpt4 key购买 nike

下面的 Yii 模型方法应该为每个记录返回 2 个值,名称和描述,而不是只返回描述。当直接在 MySQL 中执行时,相同的查询可以完美运行。 Yii 是否阻止执行其中一个连接?

public function reportEducation(){
$criteria = array(
'select' => "
concat(person.name_first," ",person.name_last),
group_concat(person_studylevel.description)",
'join' => "
inner join person on junior = person.id
inner join person_studylevel on level = person_studylevel.id",
'group by' => 'junior'
);
return PersonEducation::model()->findAll($criteria);
}

这是我的查询:

select 
concat(person.name_first," ",person.name_last) as name,
group_concat(person_studylevel.description separator ", ")
from person_junior_education
left join person on junior = person.id
left join person_studylevel on level = person_studylevel.id
group by junior

其中一部分似乎与 concat_group 函数有关,因为如果我删除它,它会正确显示描述字段。

但名称字段从未显示。也许问题是 yii 如何处理 mysql 函数?

最佳答案

我的建议是,不要使用 CActiveRecord 进行复杂查询,它不是为此而设计的,它也不是 SQL 的替代品。它只是为了轻松地对行执行 CRUD 操作。

我要做的是创建一个 view ,然后为该 View 创建一个模型。这样你就可以简单地做:

PersonEducationView::model()->findAll(); // easy

但是如果您必须使用事件记录,那么可以在您的 PersonEducation 模型中创建 2 个属性,以便它有地方存储查询结果,还更新您的查询以使用别名,以便它知道将它们存储在哪里:

   // protected/models/PersonEducation.php
public $fullname;
public $description;

public function reportEducation(){
$criteria = array(
'select' => "
concat(person.name_first," ",person.name_last) AS fullname,
group_concat(person_studylevel.description) AS description",
'join' => "
inner join person on junior = person.id
inner join person_studylevel on level = person_studylevel.id",
'group by' => 'junior'
);
return PersonEducation::model()->findAll($criteria);
}

免责声明:完全未经测试

关于php - 为什么 yii 在双内连接查询中省略值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14477432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com