首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >symfony - mysql to Criteria()

symfony - mysql to Criteria()
EN

Stack Overflow用户
提问于 2011-02-04 21:25:38
回答 1查看 438关注 0票数 0

我在mySQL中有以下内容:

代码语言:javascript
复制
SELECT t.tag, COUNT( * ) AS `count`
FROM tag t, content_item_tag c
WHERE t.id = c.tag_id
GROUP BY t.id, c.tag_id
ORDER BY count DESC
LIMIT 0 , 30

有人能帮我把它转换成Propel中的Criteria()查询吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-05 04:49:05

请在Propel的博客上查看最新条目:How Can I Write This Query Using An ORM?下面是从那里引用的内容:

答案#1:你不需要ORM

propel-users邮件列表上最近的一篇帖子要求提供以下查询的Propel版本:

代码语言:javascript
复制
SELECT COUNT(t1.user) AS users, t1.choice AS lft, t2.choice AS rgt
FROM Choices t1 iNNER JOIN Choices t2 ON (t1.user = t2.user)
WHERE t1.choice IN (...) AND t2.choice IN (...)
GROUP BY t1.choice, t2.choice;

这个查询不是面向对象的,它是纯关系的,所以它不需要对象关系映射。在ORM中执行此查询的最佳方法是跳过ORM,直接使用PDO:

代码语言:javascript
复制
<?php
$con = Propel::getConnection();
$query = 'SELECT COUNT(t1.user) AS users, t1.choice AS lft, t2.choice AS rgt
  FROM choice t1 iNNER JOIN choice t2 ON (t1.user = t2.user)
  WHERE t1.choice IN (?, ?) AND t2.choice IN (?, ?)
  GROUP BY t1.choice, t2.choice';
$stmt = $con->prepare($query);
$stmt->bindValue(1, 'foo');
$stmt->bindValue(2, 'bar');
$stmt->bindValue(3, 'baz');
$stmt->bindValue(4, 'foz');
$res = $stmt->execute();

纯关系查询的提示如下:

  • 选择部分选择主表的某些列
  • 选择部分从多个表中聚合数据
  • 选定的列使用特定于供应商的SQL函数
  • 查询通过不共享外键的列联接表<

>H112查询很长,并进行几次联接

  • 查询使用GROUP BY或HAVING

H116用户发布查询,但不知道相应的对象模型

这是对“我如何编写…”最常见的回答有个问题。在项目内部使用ORM进行直接数据库查询并不是一件坏事,因为ORM是适合这项工作的工具。如果Propel使代码编写变得更加复杂,不能重用,或者非常慢,那么就不要使用它。实事求是。

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

https://stackoverflow.com/questions/4898469

复制
相关文章

相似问题

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