zend framework-sql查询的结果数组能包含数据库名称吗?

7dl7o3gd  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(279)

如果我们运行如下查询:

SELECT `user`.`user_id`
     , `user`.`username`
     , `profile`.`user_id`
     , `profile`.`name`
     , `profile`.`location`
  FROM `user`
  JOIN `profile`
 USING (`user_id`)
 WHERE `user`.`user_id` = 1;

然后我们得到结果集:

object(ArrayObject)
    private 'storage' => 
        array
           'user_id' => string '1'
           'username' => string 'ExampleUsername'
           'name' => string 'Example name'
           'location' => string 'Example location'

注意 user_id 字段只返回一次,即使它在sql查询中存在两次。
有没有办法将表名作为结果集的一部分返回?例如,需要以下结果集:

object(ArrayObject)
    private 'storage' => 
        array
           'user' => array
               'user_id' => string '1'
               'username' => string 'ExampleUsername'
           'profile' => array
               'user_id' => string '1'
               'name' => string 'Example name'
               'location' => string 'Example location'

我在其他框架(laravel、codeigniter)中也看到过这种情况,但没有看到zendframeworkversion2或3的选项。
这只是一个示例sql查询。在我们的项目中,我们正在运行更复杂的查询,其中返回的以表名作为键的关联数组是理想的。

fafcakar

fafcakar1#

我想您的意思是希望键包含表名,而不是数据库名。
iirc在zend框架中没有实现这一点的内置方法。
您可以使每个键不同,但这取决于您如何定义列别名:

SELECT `user`.`user_id` AS user_user_id
     , `user`.`username`
     , `profile`.`user_id` AS profile_user_id
     , `profile`.`name`
     , `profile`.`location`
  FROM `user`
  JOIN `profile`
 USING (`user_id`)
 WHERE `user`.`user_id` = 1;

这是任何在关联数组中返回结果的数据库库的常见问题,而不仅仅是zend框架,甚至不仅仅是php。
您展示的第二个示例是将列提取到某种按表分解的嵌套数据结构中,我使用过的任何数据库库都不支持这个示例。它将如何返回以下查询的结果?

SELECT user.user_views + profile.profile_views AS total_views
FROM user JOIN profile USING (user_id)

会吗 total_views 属于 user 钥匙还是钥匙 profile 钥匙?
还有许多其他类似的sql查询示例,它们返回的结果并不严格“属于”任何一个联接表。

相关问题