首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yii CSqlDataProvider混淆

Yii CSqlDataProvider混淆
EN

Stack Overflow用户
提问于 2011-05-27 22:03:34
回答 1查看 2.3K关注 0票数 1

我在理解CSqlDataProvider和它的工作原理时遇到了一些问题。

当我使用CActiveDataProvider时,可以按如下方式访问结果:

代码语言:javascript
复制
$data->userProfile['first_name'];

但是,当我使用CSqlDataProvider时,我知道结果是以数组而不是对象的形式返回的。但是,数组的结构是扁平的。换句话说,我看到了以下数组:

代码语言:javascript
复制
$data['first_name'] 

而不是

代码语言:javascript
复制
$data['userProfile']['first_name']

但是这里的问题是,如果我的sql代码中有另一个包含first_name字段的连接表(让我们称它为'author'),该怎么办?使用CActiveDataProvider可以消除这两个字段的歧义,因此我可以执行以下操作来访问这两个字段:

代码语言:javascript
复制
$data->userProfile['first_name'];
$data->author['first_name'];

但是使用CSqlDataProvider,似乎没有任何方法可以访问数据,如下所示:

代码语言:javascript
复制
$data['userProfile']['first_name'];
$data['author']['first_name'];

因此,除了直接在我的SQL中为这些字段指定一个唯一的名称之外,还可以这样做:

代码语言:javascript
复制
select author.first_name as author_first_name, userProfile.first_name as user_first_name

然后像这样引用它们:

$data“‘author_first_name”;$data“’user_first_name”

有没有办法让CSqlDataProvider自动构建数组的结构,使它们像CActiveDataProvider对象一样嵌套?这样我就可以使用$data‘’userProfile‘调用它们。

或者我应该使用另一个类来获得这些类型的嵌套数组?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-31 00:56:20

据我所知,没有Yii DB方法像您所寻找的那样将连接查询结果分解到2D数组中。我认为您需要按照您的建议在select语句中给列名加上别名。

当您在查询中联接表时,MySql返回一行数据,而CSqlDataProvider返回MySql所做的事情:按列名索引/键控的单个表格式数组表示,就像您的查询返回的那样。

如果您想将结果分解到一个多维数组中,我可以给列加上别名,或者使用常规的CActiveDataProvider (您仍然可以通过CDbCritiera传递复杂的查询和连接)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6153344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档