gpt4 book ai didi

php - 使用 CDBCriteria 进行联接查询

转载 作者:行者123 更新时间:2023-12-04 18:22:49 26 4
gpt4 key购买 nike

我正在尝试在 Yii 框架中使用 CDBCriteria 进行 Join 查询。问题是连接查询成功运行,但它不显示其他表中的列。

我正在按照以下方式进行

$criteria = new CDbCriteria;

$criteria->order = 't.id desc';

$criteria->select = '*';

$criteria->join = ' INNER JOIN table2 INNER JOIN table3 INNER JOIN table4';

当我运行它时,我只能看到显示的邮件 table1 列。其他列未显示。

在我的模型类中,我的关系有
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'user' => array(self::BELONGS_TO, 'DmPhoneUser', 'user_id'),
'command' => array(self::BELONGS_TO, 'DmOtaCommand', 'command_id'),
'partner' => array(self::BELONGS_TO, 'DmPartner', 'partner_id'),
);
}

****************************************************** ******
public function actionGetHistory($start, $per_page)
{
$partner_id = '10';
$criteria = new CDbCriteria;
$criteria->order = 't.history_id desc';
$criteria->select = 't.*, table2.*';
$criteria->join = ' INNER JOIN table2 ON t.command_id = table2.command_id';
$result = Table_1_class::model()->with('command')->findAll();
$history_data = CJSON::encode($result);
echo $history_data;
}

这里command_id在table1和table2中很常见。

这就是我使用标准代码的方式。

最佳答案

正如我所说,Yii 的 Active Record 实现将只使用在表本身中定义的列或您通过 with 链接到的表。 ,而不是您在结果集中返回的任意列。

解决方案 1:定义与 table2 的关系, 将该关系添加到 with , 并摆脱 join .然后您可能需要将每个返回的对象转换为一个数组 - CJSON::encode不能很好地处理具有关系的模型。

解决方案2:使用Yii::app()->db->createCommand("SQL query")->queryAll();而不是事件记录。这将产生一个数组数组,CJSON::encode将没有问题。

关于php - 使用 CDBCriteria 进行联接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10316652/

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