Как я могу построить этот запрос в доктрине Zend - PullRequest
0 голосов
/ 13 мая 2011

У меня есть все модели. Мне нужно определить отношения в доктрине и построить запрос, используя доктрину.

Запрос без доктрины, который работает нормально.

SELECT * FROM asset_site_link l
join assets a on l.assetID = a.id
join assetTypes t on t.id = a.assetTypeID
join assetCategories c on c.id = a.categoryID
where t.name="image" AND c.name = "static_banner"
and l.siteID = "2"

Моя первая попытка что-то вроде этого, которая не сработала.

 $q = Doctrine_Query::create()
    ->select('r.*')
    ->from('assetManagement_Model_asset r')
    ->leftJoin('r.assetTypeID t')
    ->leftJoin('r.categoryID c')  
    ->leftJoin('r.assetSiteLink l')                        
    ->where('r.isDeleted = 0')
    ->andWhere('t.name = ?', "image")
    ->andWhere('c.name = ?', "static_banner")
    ->andWhere ('l.siteID = ?', "2");

пока запрос ниже работает нормально (без объединения assetSiteLink)

 $q = Doctrine_Query::create()
    ->select('r.*')
    ->from('assetManagement_Model_asset r')
    ->leftJoin('r.assetTypeID t')
    ->leftJoin('r.categoryID c')  
    ->where('r.isDeleted = 0')
    ->andWhere('t.name = ?', "image")
    ->andWhere('c.name = ?', "static_banner");

Просто чтобы сказать вам, что модель актива имеет отношение один ко многим с AssetSiteLink

Есть идеи?

Ответы [ 2 ]

1 голос
/ 31 января 2012

Если кому-то интересно, почему вышеприведенный код не будет для них выполняться, это может быть связано с использованием функции "andWhere ()". В моей версии Zend Framework нет функции "andWhere ()"; вместо этого вы просто вызываете where () дважды.

Это означает, что для меня вышеуказанный фрагмент кода должен быть написан так:

q = Doctrine_Query::create()
        ->select('r.*, l.*')
        ->from('linkManagement_Model_assetSiteLink l')
        ->leftJoin('l.assetSiteLink r')                        
        ->leftJoin('r.assetTypeID t')
        ->leftJoin('r.categoryID c')              
        ->where('r.isDeleted = 0')
        ->where('t.name = ?', "image")
        ->where('c.name = ?', "static_banner")
        ->where('l.siteID = ?', "2")
1 голос
/ 13 мая 2011
   $q = Doctrine_Query::create()
        ->select('r.*, l.*')
        ->from('linkManagement_Model_assetSiteLink l')
        ->leftJoin('l.assetSiteLink r')                        
        ->leftJoin('r.assetTypeID t')
        ->leftJoin('r.categoryID c')              
        ->where('r.isDeleted = 0')
        ->andWhere('t.name = ?', "image")
        ->andWhere('c.name = ?', "static_banner")
        ->andWhere('l.siteID = ?', "2")
   ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...