我一直在使用实体时一直在努力寻找,我真的不明白出了什么问题。
我正在使用这两个类:
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...
这两对实体以完全相同的方式声明,所以我真的不明白......
感谢您的帮助!
是的!
我发现了我的错误...这实际上与我的关系无关。
我的错误是我使用了gedmo并且忘记设置默认区域设置,这意味着它无法检索任何产品,因为它不知道在哪里查找。Gedmo 抛出了一个异常,但它被布局未找到异常覆盖(这是一个 zend 错误,因为我的布局没有问题(。
多亏了XDebug和几个小时的耐心,我终于能够找到确切的异常消息并在几分钟内修复它。
感谢任何关注的人,这是我的错,没有提供足够的代码(带有 gedmo 的东西(,因为我认为这实际上设置得很好......