2012-05-10 2 views
1

Я боролся с некоторыми findBy, используя сущность, и я действительно не могу понять, что не так.Zend Framework & Doctrine 2 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

YEAH!

Я нашел свою ошибку ... Это фактически не имело никакого отношения к моим отношениям.
Моя ошибка заключалась в том, что я использую gedmo и забыл установить стандартную локаль, то есть просто не мог получить какие-либо продукты, потому что не знал, где искать. Gedmo выбрасывал исключение, но оно было переопределено отсутствием исключения в макете (это своего рода ошибка zend, потому что с моим макетом проблем не было).

Благодаря XDebug и нескольким часам терпения я наконец смог найти точное сообщение об исключении и исправить его через несколько минут.

Спасибо за всех, кто обратил внимание в любом случае, это была моя ошибка, не обеспечивающая достаточный код (с материалом гедмо), потому что я думал, что это действительно хорошо установлено ...

Смежные вопросы