Zend DB Выберите версию простого Mysql Left Join - PullRequest
2 голосов
/ 27 сентября 2011

У меня есть простой левый запрос на MySQL

SELECT sp. * , p.name, p.date_created
FROM subpages sp
LEFT JOIN pages p ON p.id = sp.page_id

Я не знаю, как выполнить этот запрос из Zend Framework.

У меня есть страница Mapper, которая обращается к странице DbTable, которая расширяет Zend_Db_Table_Abstract. Я прочитал несколько статей, так что я полагаю, что выражение должно выглядеть примерно так из mapper

$select = $this -> DbTable() -> select();
$select -> joinleft(..... This is what I dont know how to write....);
$results = $this -> DbTable() -> fetchAll($select);
if($results) { return $result; }

В статье использовалось $select -> from(), поэтому, где мой ум застрял, зачем нам писать $select -> from("subpages"), когда он уже будет определен на странице DbTable.

Как правильно написать оператор соединения?

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

Если вы хотите использовать select с несколькими таблицами, вам нужно получить его из адаптера таблицы , который является Zend_Db объектом (и вам нужно будет указать свою таблицу в from() метод).

Итак, вам нужно что-то вроде следующего:

$select = $this->DbTable()->getAdapter()->select();
$select->from(array("mi" => "tableName"));
$select->joinLeft(array("p" => "pages"), "p.id = mi.page_id");
(etc)

Надеюсь, это поможет,

1 голос
/ 27 сентября 2011

Из запроса, который вы разместили, вы можете использовать следующее

 (You have not mentioned table name for ailas 'mi' so I have taken it as 'your_table_name' )

$select = $this -> DbTable() -> select()->from(array("your_table_name" => 'mi');
$select -> joinleft(array("pages" => 'p'),"p.id = mi.page_id");
$results = $this -> DbTable() -> fetchAll($select);
if($results) { return $result; }

Hope it will work for you mrN.
...