Получить псевдоним таблицы из Zend_Db_Table_Select - PullRequest
2 голосов
/ 25 августа 2009

Я работаю над шаблоном Active Record (похожим на RoR / Cake) для моей библиотеки Zend Framework. У меня такой вопрос: как мне определить, использует ли объект выбора псевдоним для таблицы или нет?

$select->from(array("c" => "categories"));

против

$select->from("categories");

и я передаю это функции "выборки", которая добавляет дополнительные объединения и так далее, чтобы автоматически получать отношения строк ... Я хочу добавить несколько пользовательских sql; либо «c.id», либо «category.id» в зависимости от того, как пользователь использовал метод «from».

Я знаю, что могу использовать

$parts = $select->getPart(Zend_Db_Select::FROM); 

для получения данных from в виде массива, а имя таблицы или псевдоним, кажется, находятся в «слоте» 0 указанного массива. Имя таблицы или псевдоним всегда будут в нулевом слоте? то есть я могу надежно использовать:

$tableNameOrAlias = $parts[0];

Извините, если это сложно, но надеюсь, что вы можете помочь! :)

1 Ответ

3 голосов
/ 25 августа 2009

Логично, я бы подумал, что так оно и должно работать. Чтобы быть в безопасности, создайте несколько фиктивных запросов, используя Select (), и выведите массив деталей, используя print_r или такой.

Я только что выполнил этот тест, псевдоним - это ключ массива, а не числовой массив с нулями:

<code>   $select = $this->db->select()->from(array("c" => "categories","d" => "dummies"));
   $parts = $select->getPart(Zend_Db_Select::FROM);
   echo '<pre>';
   print_r($parts);
   echo '
';

Выход:

Array
(
    [c] => Array
        (
            [joinType] => inner join
            [schema] => 
            [tableName] => categories
            [joinCondition] => 
        )

)

Так что вам нужно ссылаться на него как $part["c"]

...