Doctrine2 “Like” SQL 查询和“Class true 不存在”错误

Posted

技术标签:

【中文标题】Doctrine2 “Like” SQL 查询和“Class true 不存在”错误【英文标题】:Doctrine2 "Like" SQL query and "Class true does not exist" error 【发布时间】:2012-06-02 09:14:15 【问题描述】:

我已经看到关于 Doctrine “LIKE” 查询主题的主要帖子(例如,参见 this one)。我有一个 SYmfony2 应用程序。在控制器中,我调用实体存储库进行查询。特别是,在实体存储库中,我定义了以下函数:

return $this->getEntityManager()
        ->createQuery("SELECT p FROM AcmePromoBundle:Promo p 
            JOIN p.product pr 
            WHERE pr.name LIKE 'La'")->getResult(); 

它可以工作但不返回任何东西,因为没有 Product (pr) 的名称是 La。 然后,我尝试在 SQL 查询中添加 % 字符,如下所示:

"SELECT p FROM AcmePromoBundle:Promo p JOIN p.product pr WHERE pr.name LIKE 'La%'" 

这里:

"SELECT p FROM AcmePromoBundle:Promo p JOIN p.product pr WHERE pr.name LIKE La%" 

但返回以下错误“Class true 不存在”。 我也尝试使用“setParameter”功能,但它不起作用!有什么想法吗?

【问题讨论】:

虽然我使用的是 2.0 Doctrine 的旧版本,但这样的查询没有问题。也许您应该将您的 Doctrine 更新到最新版本? 嗯!我正在使用最后一个 Symfony2 版本!我想 Doctrine 已经更新了! 是的,但你还是应该检查一下。可能有一个错误已在以后的一些版本中得到修复;) 你确定是这个查询的原因吗?我在任何地方都看不到任何会在字符串中显示为“真”的东西。您是否也检查过您的映射是否正确(iirc,您可以在命令行工具中使用 validate-mappings)?我在许多 D2 版本中都使用过连接查询,它们总是运行良好,我认为 LIKE 不会对其产生影响。 @JaniHartikainen 不,我不是!实际上,我发布了调用此函数时发生的错误。你得出了一个可能的原因……我要调查一下。我会及时通知你的! 【参考方案1】:

现在可以了!我只在所有实体类中添加了 __toString 函数!例如:

public function __toString()
    return '\Acme\PromoBundle\Entity\Promo';
  

【讨论】:

以上是关于Doctrine2 “Like” SQL 查询和“Class true 不存在”错误的主要内容,如果未能解决你的问题,请参考以下文章

SQL like 模糊查询

如何在 SQL Server 查询中同时使用 LIKE 和 NOT LIKE

Sql Server参数化查询之where in和like实现详解

在SQL Server中用好模糊查询指令LIKE

Sql Server参数化查询之where in和like实现详解

sql中like是啥意思?