【问题标题】:Doctrine Join DQL教义加入 DQL
【发布时间】:2011-03-06 08:56:39
【问题描述】:

我想在特定 ID 上的 2 个表之间进行连接。目前,我有这个 DQL:

$q = Doctrine_Query::create()
         ->select('e.*, i.itemName, i.itemtypeId')
         ->from('Model_EventItem e')
         ->leftJoin('Model_Item i ON e.itemId = i.itemId')
         ->where('e.eventitemId = ?', $event->eventId)
         ->orderBy('i.itemName ASC');

结果是空的,虽然我的 eventId 有一个值……你能帮帮我吗?我在某处有关于 DQL 连接的教程?在 Doctrine 文档的帮助下,我无法正确理解。

谢谢!

PS 我有与 Zend 框架结合使用的原则。

【问题讨论】:

  • 在DQL上使用execute()函数后$q是否为空?因为您问题中的这个查询不会对数据库做任何事情。
  • 确实,我必须执行....但是查询是否正确?
  • try ->leftJoin(e.Model_Item i) ON 子句由 Doctrine 根据您的映射添加。如需更多示例,请查看doctrine-project.org/projects/orm/1.2/docs/manual/…

标签: php zend-framework join doctrine


【解决方案1】:

您应该将左连接中的名称从 Model_EventItem 更改为 e

$q = Doctrine_Query::create()
     ->select('e.*, i.itemName, i.itemtypeId')
     ->from('Model_EventItem e')
     ->leftJoin('Model_EventItem.Model_Item i')
     ->where('e.eventitemId = ?', $event->eventId)
     ->orderBy('i.itemName ASC');

【讨论】:

    【解决方案2】:

    您需要向模型添加关系并使用该关系连接表

    $q = Doctrine_Query::create()
         ->select('e.*, i.itemName, i.itemtypeId')
         ->from('Model_EventItem e')
         ->leftJoin('Model_EventItem.Model_Item i')
         ->where('e.eventitemId = ?', $event->eventId)
         ->orderBy('i.itemName ASC');
    

    【讨论】:

    • 好的,但是如何在模型之间添加关系?我不知道......从来没有做过
    • 你可以在 yaml 模式中定义关系或者在 (Base)Model 的 setUp-method 中自己实现它们
    【解决方案3】:
    $q = Doctrine_Query::create()
         ->select('e.*, i.itemName, i.itemtypeId')
         ->from('Model_EventItem e, e.Model_Item i')
         ->where('e.eventitemId = ?', $event->eventId)
         ->orderBy('i.itemName ASC');
    

    【讨论】:

    • 架构中我的关系有问题...弹出此错误:消息:未知关系别名Model_Item
    • 是的,最好检查一下。教义模型通常用驼峰式而不是下划线编写。
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多