Zend Framework& Doctrine 2 findBy使用实体返回空数组

时间:2012-05-10 13:59:00

标签: php zend-framework doctrine-orm find findby

我一直在努力使用一个实体的一些findBy,我真的无法理解什么是错的。

我正在使用这两个类:

GPos_Model_Product

/**
* @Entity
* @Table(name="Product")
*/
class GPos_Model_Product extends GPos_Doctrine_ActiveEntity {
    /**
     * @Id @Column(type="integer")
     * @GeneratedValue
     */
    protected $id;

    /**
     * @ManyToOne(targetEntity="GPos_Model_Store")
     * @JoinColumn(name="store_id", referencedColumnName="id")
     **/
    protected $store;
}

GPos_Model_Store

/**
 * @Entity
 * @Table(name="Store")
 */
class GPos_Model_Store extends GPos_Doctrine_ActiveEntity {
    /**
     * @Id @Column(type="integer")
     * @GeneratedValue
     */
    protected $id;

    /** @Column(name="status", type="string", columnDefinition="enum('active', 'deleted')")  */
    protected $status = 'active';
}

注意:我删除了这两个类中无用的字段以使其更具可读性

所以这就是问题所在: 在我的一个控制器中,我正在尝试检索链接到某个商店的所有产品:

public function indexAction() {
    $this->_helper->getHelper('layout')->disableLayout();
    $authNamespace = new Zend_Session_Namespace('Zend_Auth');

    //get store's products list.
    $store = GPos_Model_Store::find($authNamespace->store);
    var_dump($store); //prints store successfully.
    //next line throws an unusable exception talking about layout.phtml not found...
    $products = GPos_Model_Product::findByStore($store->getId());
    //give it to the view for the products list rendering.
    var_dump($products);
    $this->view->products = $products;
}

很奇怪,当我使用$products = GPos_Model_Product::findByStore($store);代替时,我没有异常,只是因为一个空数组。 我在另一个控制器中使用完全相同的方式(使用getId())关于另外两个具有相同关系且工作正常的实体。

我检查了我的数据库,我用作参数的商店确实绑定了一些产品,这意味着一个空数组也不正确。我应该检索一个类似8个产品的数组...

这是我的其他控制器的代码正常工作(再次缩小代码):

$user = GPos_Model_User::findOneByLogin($form->getValue('login'));
$contact = GPos_Model_Contact::findByUser($user->getId());
//these lines work perfectly and I'm receiving an array of `GPos_Model_Contact` entities... 

这两对实体以完全相同的方式声明,所以我真的不明白......

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

是啊!

我发现了我的错误......它实际上与我的关系毫无关系 我的错误是我使用gedmo并忘记设置默认语言环境,这意味着它无法检索任何产品,因为它不知道在哪里看。 Gedmo抛出一个异常,但它被布局找不到异常覆盖(这是一种zend bug,因为我的布局没有问题)。

感谢XDebug和几个小时的耐心,我终于能够找到确切的异常消息并在几分钟内修复它。

感谢所有关注的人,我的错是没有提供足够的代码(使用gedmo的东西),因为我认为这实际上设置得很好......