ВЫБЕРИТЕ «0» КАК переменную ... с Zend_Db_Select - PullRequest
1 голос
/ 25 февраля 2010

Я пытаюсь создать оператор выбора, который использует следующую структуру:

$db
    ->select()  
    ->from(  
        array('i' => ...),  
        array('provisional', 'itemID', 'orderID'))  
    ->columns(array("'0' AS provisionalQty", "'ballast' AS productType"))  
    ->joinLeft(  
        array('o' => ...),  
        'i.orderID = o.orderID', array())  
    ->joinLeft(  
        array('f' => ...),  
        'i.productID = f.fixtureID AND f.supplierID = o.supplierID', array())  
    ->joinLeft(  
        array('b' => ...),  
        'f.lampTechnology = b.lampTechnology ' .  
        ' AND f.lampCount = b.lampCount ' .  
        ' AND f.ballastVoltage = b.ballastVoltage ' .  
        ' AND b.supplierID = o.supplierID')  
    ->where('i.orderID = ?', $oObj->orderID, Zend_Db::INT_TYPE)  
    ->where('!i.hidden AND i.productType = ? AND !i.provisional', 'fixture')  

Эквивалент в MySQL будет выглядеть примерно так (работает нормально) ...

SELECT '0' AS provisionalQty, 'ballast' AS productType, i.* FROM ... LEFT JOIN ... WHERE ...;

Это, однако, не работает, как ожидалось. Метод $ db-> columns () ожидает, что к каждому столбцу будет прикреплена таблица, даже к псевдо-столбцам. Есть идеи?

-Крис

Ответы [ 2 ]

1 голос
/ 25 февраля 2010

Из-за того, как этот класс работает, кажется, что использование строки / массива ищет конкретную таблицу, тогда как класс Zend_Db_Expr не требует фактической таблицы.

$db
    ->select()
    ->columns(new Zend_Db_Expr("'0' AS provisionalQty, 'ballast' AS productType"))
0 голосов
/ 25 февраля 2010

Я думаю, что вы используете столбец выбора неправильно здесь. Это должно быть что-то вроде:

// "ballast AS productType, 0 as provisionalQty"
$db->columns(array("productType" => "ballast", "provisionalQty" => 0));

Просто помните, что абстракция столбцов обратна обычной инструкции AS, и вам не нужно включать "AS".

...