[英]SELECT '0' AS variable ... with Zend_Db_Select
我正在嘗試創建一個使用以下結構的 select 語句:
$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() 方法期望每個列都有一個表,即使是“偽”列。 有任何想法嗎?
-克里斯
由於此類的工作方式,似乎使用字符串/數組查找特定的表,而Zend_Db_Expr類不需要實際的表。
$db
->select()
->columns(new Zend_Db_Expr("'0' AS provisionalQty, 'ballast' AS productType"))
我認為您在此處使用的列選擇不正確。 應該是這樣的:
// "ballast AS productType, 0 as provisionalQty"
$db->columns(array("productType" => "ballast", "provisionalQty" => 0));
只需記住,列的抽象與常規AS語句相反,因此您不必包括“ AS”。
對於那些在谷歌上搜索並尋找Zend 2或Laminas解決方案的人,這是我的代碼:
$sql = new Laminas\Db\Sql\Sql($this->adapter);
$select = $sql->select();
$select->from(['i' => ...])
->columns([
'id' => 'id',
'provisionalQty' => new Laminas\Db\Sql\Predicate\Expression('"0"'),
'productType' => new Laminas\Db\Sql\Predicate\Expression('"ballast"')
]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.