2009-08-24 4 views
1

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

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

против

$select->from("categories"); 

и я передать это функции «выборка», которая добавляет дополнительные соединения и этажерки, чтобы получить отношения строки автоматически ... Я хочу, чтобы добавить некоторые пользовательский SQL ; либо «c.id» или «categories.id», основываясь на том, как пользователь использовал метод «from».

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

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

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

$tableNameOrAlias = $parts[0]; 

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

+0

Просто подсказка, имя для того, что вы называете слотом, здесь _index_. Таким образом, массив [0] является индексом 0, массив ['c'] является индексом 'c'. – Fractalizer

ответ

1

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

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

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

Выход:

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

) 

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

+0

Хм, это здорово, но моя проблема в том, что я не знаю, будет ли пользователь передавать объект выбора с помощью таблицы с псевдонимом или просто именем таблицы, поэтому я не могу ссылаться на него как на $ part ["c"]. Может быть, я могу просто захватить [c], используя ключ php ($ array)? – typeoneerror

+0

Ницца, да! Я думаю, что это куда-то. $ parts = array ("c" => array ("tableName" => "categories")); Эхо-ключ ($ parts); Дает мне псевдоним. Просто нужно зациклиться на части, а затем захватить ключи и использовать их. Спасибо за вашу помощь! – typeoneerror