Yii CSqlDataProvider混乱

时间:2011-05-27 14:03:34

标签: yii

我在理解CSqlDataProvider及其运作方式时遇到了一些麻烦。

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

$data->userProfile['first_name'];

但是,当我使用CSqlDataProvider时,我理解结果是作为数组而不是对象返回的。但是,阵列的结构是扁平的。换句话说,我看到以下数组:

$data['first_name'] 

而不是

$data['userProfile']['first_name']

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

$data->userProfile['first_name'];
$data->author['first_name'];

但是对于CSqlDataProvider,似乎无论如何我都无法访问数据如下:

$data['userProfile']['first_name'];
$data['author']['first_name'];

因此,除了直接在我的SQL中为这些字段分配唯一名称之外,通过这样做:

select author.first_name as author_first_name, userProfile.first_name as user_first_name

然后像这样引用它们:

$数据[ 'AUTHOR_FIRST_NAME']; $数据[ 'USER_FIRST_NAME']

无论如何要让CSqlDataProvider自动构造数组,以便它们以与CActiveDataProvider对象相同的方式嵌套?这样我就可以使用$ data ['userProfile'] ['first_name']

来调用它们

或者我是否应该使用另一个类来获取这些嵌套数组?

非常感谢!

1 个答案:

答案 0 :(得分:2)

据我所知,没有Yii DB方法可以将JOIN查询结果分解为您正在寻找的2D数组。我认为您需要 - 如您所建议的那样 - 在select语句中为列名添加别名。

当您在查询中JOIN表时,MySql返回单行数据,CSqlDataProvider返回MySql的确切行为:单个表格数组表示由列名称索引/键入,就像您的查询返回一样。

如果您想将结果拆分为多维数组,我可以为列添加别名,或使用常规CActiveDataProvider(您仍然可以通过CDbCritiera传递复杂查询和连接)。