加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 使用Propel选择特定列而不使用别名

发布时间:2020-12-13 17:23:59 所属栏目:PHP教程 来源:网络整理
导读:使用Propel 1.6提供的方法重写简单查询时遇到了一些麻烦. 查询如下: SELECT type_id,COUNT(id) as `count` FROM visit GROUP BY type_id; 使用Propel,我写了以下内容: $visitCount = VisitQuery::create() -withColumn('COUNT(id)','count') -groupBy('Typ
使用Propel 1.6提供的方法重写简单查询时遇到了一些麻烦.

查询如下:

SELECT type_id,COUNT(id) as `count` FROM visit GROUP BY type_id;

使用Propel,我写了以下内容:

$visitCount = VisitQuery::create()
                ->withColumn('COUNT(id)','count')
                ->groupBy('TypeId')
                ->find();

这会生成以下查询:

SELECT visit.ID,visit.JOB_ID,visit.ENGINEER_ID,visit.TYPE_ID,visit.VISIT_DATE,visit.STATUS,COUNT(id) AS count 
FROM `visit` 
GROUP BY visit.TYPE_ID

哪个有效,但我只需要列type_id和计数,所以我尝试添加以下内容:

$visits = VisitQuery::create()
            ->withColumn('COUNT(id)','count')
            ->select(array('TypeId'))
            ->groupBy('TypeId')
            ->find();

这会生成以下(工作)查询:

SELECT COUNT(id) AS count,visit.TYPE_ID AS "TypeId" 
FROM `visit` GROUP BY visit.TYPE_ID

但是,我不想为type_id列添加别名.我尝试将实际的列名称传递给select数组( – > select(array(‘type_id’))),但这导致以下查询(显然不起作用):

SELECT COUNT(id) AS count,AS "type_id" FROM `visit` GROUP BY visit.TYPE_ID

如何在没有别名的情况下检索type_id列?

解决方法

Propel抽象列名称,以便您的PHP不一定需要了解它们.

从PropelORM.org开始:

Manipulating object model names allows you to be detached from the
actual data storage,and alter the database names without necessarily
updating the PHP code.

TypeID将是架构中phpName等于的内容.尝试使用此而不是mysql列名称.

考虑到这一点,如果您真的想使用列的实际名称,可以使用propel的introspection classes来实现.例如:

var_dump(VisitPeer::getTableMap()->getColumnByPhpName('TypeId')->getName());
var_dump(VisitPeer::getTableMap()->getColumn('type_id')->getPhpName());

但正如documentation本身所说:

Remember to always use the phpName in the PHP code

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读