// Improve collections : where() method reworked (prototype changed) + validation of fields
This commit is contained in:
@@ -208,7 +208,7 @@ class CartRuleCore extends ObjectModel
|
|||||||
{
|
{
|
||||||
$return = true;
|
$return = true;
|
||||||
$cart_rules = new Collection('CartRule');
|
$cart_rules = new Collection('CartRule');
|
||||||
$cart_rules->where('a.id_customer = '.(int)$id_customer);
|
$cart_rules->where('id_customer', '=', $id_customer);
|
||||||
foreach ($cart_rules as $cart_rule)
|
foreach ($cart_rules as $cart_rule)
|
||||||
$return &= $cart_rule->delete();
|
$return &= $cart_rule->delete();
|
||||||
return $return;
|
return $return;
|
||||||
|
|||||||
@@ -681,7 +681,8 @@ class CategoryCore extends ObjectModel
|
|||||||
$id_lang = Context::getContext()->language->id;
|
$id_lang = Context::getContext()->language->id;
|
||||||
|
|
||||||
$categories = new Collection('Category', $id_lang);
|
$categories = new Collection('Category', $id_lang);
|
||||||
$categories->where((int)$this->nleft.' < nleft AND nright < '.(int)$this->nright);
|
$categories->where('nleft', '>', $this->nleft);
|
||||||
|
$categories->where('nright', '<', $this->nright);
|
||||||
return $categories;
|
return $categories;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+177
-14
@@ -72,6 +72,10 @@ class CollectionCore implements Iterator, ArrayAccess, Countable
|
|||||||
*/
|
*/
|
||||||
protected $total;
|
protected $total;
|
||||||
|
|
||||||
|
protected $fields = array();
|
||||||
|
protected $alias = array();
|
||||||
|
protected $alias_iterator = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $classname
|
* @param string $classname
|
||||||
* @param int $id_lang
|
* @param int $id_lang
|
||||||
@@ -87,53 +91,122 @@ class CollectionCore implements Iterator, ArrayAccess, Countable
|
|||||||
else if (!isset($this->definition['primary']))
|
else if (!isset($this->definition['primary']))
|
||||||
throw new PrestashopException('Miss primary in definition for class '.$this->classname);
|
throw new PrestashopException('Miss primary in definition for class '.$this->classname);
|
||||||
|
|
||||||
|
$alias = $this->generateAlias();
|
||||||
$this->query = new DbQuery();
|
$this->query = new DbQuery();
|
||||||
$this->query->select('a.*');
|
$this->query->select($alias.'.*');
|
||||||
$this->query->from($this->definition['table'], 'a');
|
$this->query->from($this->definition['table'], $alias);
|
||||||
|
|
||||||
// If multilang, create association to lang table
|
// If multilang, create association to lang table
|
||||||
|
// @todo create virtual association with lang in ObjectModel::getDefinition()
|
||||||
if (isset($this->definition['multilang']) && $this->definition['multilang'])
|
if (isset($this->definition['multilang']) && $this->definition['multilang'])
|
||||||
{
|
{
|
||||||
$this->query->select('b.*');
|
$lang_alias = $this->generateAlias('@lang');
|
||||||
$this->query->leftJoin($this->definition['table'].'_lang', 'b', 'a.'.$this->definition['primary'].' = b.'.$this->definition['primary']);
|
$this->query->select($lang_alias.'.*');
|
||||||
|
$this->query->leftJoin($this->definition['table'].'_lang', $lang_alias, $alias.'.'.$this->definition['primary'].' = '.$lang_alias.'.'. $this->definition['primary']);
|
||||||
if ($this->id_lang)
|
if ($this->id_lang)
|
||||||
$this->query->where('b.id_lang = '.(int)$this->id_lang);
|
$this->query->where($lang_alias.'.id_lang = '.(int)$this->id_lang);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add WHERE restriction on query
|
* Add WHERE restriction on query
|
||||||
*
|
*
|
||||||
* @param string $str
|
* @param string $field Field name
|
||||||
|
* @param string $operator List of operators : =, !=, <>, <, <=, >, >=, like, notlike, regexp, notregexp
|
||||||
|
* @param mixed $value
|
||||||
* @return Collection
|
* @return Collection
|
||||||
*/
|
*/
|
||||||
public function where($str)
|
public function where($field, $operator, $value)
|
||||||
{
|
{
|
||||||
$this->query->where($str);
|
// Create WHERE clause with an array value (IN, NOT IN)
|
||||||
|
if (is_array($value))
|
||||||
|
{
|
||||||
|
switch (strtolower($operator))
|
||||||
|
{
|
||||||
|
case '=' :
|
||||||
|
case 'in' :
|
||||||
|
$this->query->where($this->parseField($field).' IN('.implode(', ', $this->formatValue($value, $field)));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '!=' :
|
||||||
|
case '<>' :
|
||||||
|
case 'notin' :
|
||||||
|
$this->query->where($this->parseField($field).' NOT IN('.implode(', ', $this->formatValue($value, $field)));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default :
|
||||||
|
throw new PrestashopException('Operator not supported for array value');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Create WHERE clause
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch (strtolower($operator))
|
||||||
|
{
|
||||||
|
case '=' :
|
||||||
|
case '!=' :
|
||||||
|
case '<>' :
|
||||||
|
case '>' :
|
||||||
|
case '>=' :
|
||||||
|
case '<' :
|
||||||
|
case '<=' :
|
||||||
|
case 'like' :
|
||||||
|
case 'regexp' :
|
||||||
|
$this->query->where($this->parseField($field).' '.$operator.' '.$this->formatValue($value, $field));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'notlike' :
|
||||||
|
$this->query->where($this->parseField($field).' NOT LIKE '.$this->formatValue($value, $field));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'notregexp' :
|
||||||
|
$this->query->where($this->parseField($field).' NOT REGEXP '.$this->formatValue($value, $field));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default :
|
||||||
|
throw new PrestashopException('Operator not supported');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add WHERE restriction on query using real SQL syntax
|
||||||
|
*
|
||||||
|
* @param string $sql
|
||||||
|
*/
|
||||||
|
public function sqlWhere($sql)
|
||||||
|
{
|
||||||
|
$this->query->where($this->parseFields($sql));
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add ORDER BY restriction on query
|
* Add ORDER BY restriction on query
|
||||||
*
|
*
|
||||||
* @param string $str
|
* @param string $field Field name
|
||||||
|
* @param string $order asc|desc
|
||||||
* @return Collection
|
* @return Collection
|
||||||
*/
|
*/
|
||||||
public function orderBy($str)
|
public function orderBy($field, $order = 'asc')
|
||||||
{
|
{
|
||||||
$this->query->orderBy($str);
|
$order = strtolower($order);
|
||||||
|
if ($order != 'asc' && $order != 'desc')
|
||||||
|
throw new PrestashopException('Order must be asc or desc');
|
||||||
|
$this->query->orderBy($this->parseField($field).' '.$order);
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add GROUP BY restriction on query
|
* Add GROUP BY restriction on query
|
||||||
*
|
*
|
||||||
* @param string $str
|
* @param string $field Field name
|
||||||
* @return Collection
|
* @return Collection
|
||||||
*/
|
*/
|
||||||
public function groupBy($str)
|
public function groupBy($field)
|
||||||
{
|
{
|
||||||
$this->query->groupBy($str);
|
$this->query->groupBy($this->parseField($field));
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -284,4 +357,94 @@ class CollectionCore implements Iterator, ArrayAccess, Countable
|
|||||||
$this->getAll();
|
$this->getAll();
|
||||||
unset($this->results[$offset]);
|
unset($this->results[$offset]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse all fields with {field} syntax in a string
|
||||||
|
*
|
||||||
|
* @param string $str
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function parseFields($str)
|
||||||
|
{
|
||||||
|
preg_match_all('#\{(([a-z0-9_]+\.)*[a-z0-9_]+)\}#i', $str, $m);
|
||||||
|
for ($i = 0, $total = count($m[0]); $i < $total; $i++)
|
||||||
|
$str = str_replace($m[0][$i], $this->parseField($m[1][$i]), $str);
|
||||||
|
return $str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replace a field with its SQL version (E.g. manufacturer.name with a2.name)
|
||||||
|
*
|
||||||
|
* @param string $field Field name
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function parseField($field)
|
||||||
|
{
|
||||||
|
$info = $this->getFieldInfo($field);
|
||||||
|
return $info['alias'].'.`'.$info['name'].'`';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format a value with the type of the given field
|
||||||
|
*
|
||||||
|
* @param mixed $value
|
||||||
|
* @param string $field Field name
|
||||||
|
*/
|
||||||
|
protected function formatValue($value, $field)
|
||||||
|
{
|
||||||
|
$info = $this->getFieldInfo($field);
|
||||||
|
if (is_array($value))
|
||||||
|
{
|
||||||
|
$results = array();
|
||||||
|
foreach ($value as $item)
|
||||||
|
$results[] = ObjectModel::formatValue($item, $info['type'], true);
|
||||||
|
return $results;
|
||||||
|
}
|
||||||
|
return ObjectModel::formatValue($value, $info['type'], true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain some informations on a field (alias, name, type, etc.)
|
||||||
|
*
|
||||||
|
* @param string $field Field name
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function getFieldInfo($field)
|
||||||
|
{
|
||||||
|
if (!isset($this->fields[$field]))
|
||||||
|
{
|
||||||
|
$split = explode('.', $field);
|
||||||
|
$association = '';
|
||||||
|
$definition = ObjectModel::getDefinition($this->classname);
|
||||||
|
for ($i = 0, $total_association = count($split) - 1; $i < $total_association; $i++)
|
||||||
|
{
|
||||||
|
// @todo association
|
||||||
|
}
|
||||||
|
|
||||||
|
$fieldname = $split[$i];
|
||||||
|
if (!isset($definition['fields'][$fieldname]))
|
||||||
|
throw new PrestashopException('Field '.$fieldname.' not found in class '.$this->classname);
|
||||||
|
|
||||||
|
$this->fields[$field] = array(
|
||||||
|
'name' => $fieldname,
|
||||||
|
'association' => $association,
|
||||||
|
'alias' => $this->generateAlias($association),
|
||||||
|
'type' => $definition['fields'][$fieldname]['type'],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return $this->fields[$field];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate uniq alias from association name
|
||||||
|
*
|
||||||
|
* @param string $association Use empty association for alias on current table
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function generateAlias($association = '')
|
||||||
|
{
|
||||||
|
if (!isset($this->alias[$association]))
|
||||||
|
$this->alias[$association] = 'a'.$this->alias_iterator++;
|
||||||
|
return $this->alias[$association];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -183,7 +183,7 @@ class LocalizationPackCore
|
|||||||
|
|
||||||
if (!$trg->save())
|
if (!$trg->save())
|
||||||
{
|
{
|
||||||
$this->_errors = Tools::displayError('This tax rule can\'t be saved.');
|
$this->_errors[] = Tools::displayError('This tax rule can\'t be saved.');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+39
-32
@@ -300,42 +300,49 @@ abstract class ObjectModelCore
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Format field value
|
// Format field value
|
||||||
switch ($data['type'])
|
$fields[$field] = ObjectModel::formatValue($value, $data['type']);
|
||||||
{
|
|
||||||
case self::TYPE_INT :
|
|
||||||
$fields[$field] = (int)$value;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case self::TYPE_BOOL :
|
|
||||||
$fields[$field] = (int)$value;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case self::TYPE_FLOAT :
|
|
||||||
$fields[$field] = (float)$value;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case self::TYPE_DATE :
|
|
||||||
$fields[$field] = pSQL($value);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case self::TYPE_STRING :
|
|
||||||
$fields[$field] = pSQL($value);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case self::TYPE_HTML :
|
|
||||||
$fields[$field] = pSQL($value, true);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default :
|
|
||||||
if (method_exists($this, 'formatType'.$data['type']))
|
|
||||||
$fields[$field] = $this->{'formatType'.$data['type']}($value);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $fields;
|
return $fields;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format a data
|
||||||
|
*
|
||||||
|
* @param mixed $value
|
||||||
|
* @param int $type
|
||||||
|
*/
|
||||||
|
public static function formatValue($value, $type, $with_quotes = false)
|
||||||
|
{
|
||||||
|
switch ($type)
|
||||||
|
{
|
||||||
|
case self::TYPE_INT :
|
||||||
|
return (int)$value;
|
||||||
|
|
||||||
|
case self::TYPE_BOOL :
|
||||||
|
return (int)$value;
|
||||||
|
|
||||||
|
case self::TYPE_FLOAT :
|
||||||
|
return (float)$value;
|
||||||
|
|
||||||
|
case self::TYPE_DATE :
|
||||||
|
if ($with_quotes)
|
||||||
|
return '\''.pSQL($value).'\'';
|
||||||
|
return pSQL($value);
|
||||||
|
|
||||||
|
case self::TYPE_HTML :
|
||||||
|
if ($with_quotes)
|
||||||
|
return '\''.pSQL($value).'\'';
|
||||||
|
return pSQL($value);
|
||||||
|
|
||||||
|
case self::TYPE_STRING :
|
||||||
|
default :
|
||||||
|
if ($with_quotes)
|
||||||
|
return '\''.pSQL($value).'\'';
|
||||||
|
return pSQL($value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save current object to database (add or update)
|
* Save current object to database (add or update)
|
||||||
*
|
*
|
||||||
@@ -1198,7 +1205,7 @@ abstract class ObjectModelCore
|
|||||||
$reflection = new ReflectionClass($class);
|
$reflection = new ReflectionClass($class);
|
||||||
$definition = $reflection->getStaticPropertyValue('definition');
|
$definition = $reflection->getStaticPropertyValue('definition');
|
||||||
if ($field)
|
if ($field)
|
||||||
return isset($definition[$field]) ? $definition[$field] : null;
|
return isset($definition['fields'][$field]) ? $definition['fields'][$field] : null;
|
||||||
return $definition;
|
return $definition;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -151,10 +151,10 @@ class ProductSupplierCore extends ObjectModel
|
|||||||
public static function getSupplierCollection($id_product, $group_by_supplier = true)
|
public static function getSupplierCollection($id_product, $group_by_supplier = true)
|
||||||
{
|
{
|
||||||
$suppliers = new Collection('ProductSupplier');
|
$suppliers = new Collection('ProductSupplier');
|
||||||
$suppliers->where('a.id_product = '.(int)$id_product);
|
$suppliers->where('id_product', '=', $id_product);
|
||||||
|
|
||||||
if ($group_by_supplier)
|
if ($group_by_supplier)
|
||||||
$suppliers->groupBy('a.id_supplier');
|
$suppliers->groupBy('id_supplier');
|
||||||
|
|
||||||
return $suppliers;
|
return $suppliers;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1337,7 +1337,7 @@ class OrderCore extends ObjectModel
|
|||||||
public function getOrderPaymentCollection()
|
public function getOrderPaymentCollection()
|
||||||
{
|
{
|
||||||
$order_payments = new Collection('OrderPayment');
|
$order_payments = new Collection('OrderPayment');
|
||||||
$order_payments->where('id_order = '.(int)$this->id);
|
$order_payments->where('id_order', '=', $this->id);
|
||||||
return $order_payments;
|
return $order_payments;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1426,7 +1426,7 @@ class OrderCore extends ObjectModel
|
|||||||
public function getInvoicesCollection()
|
public function getInvoicesCollection()
|
||||||
{
|
{
|
||||||
$order_invoices = new Collection('OrderInvoice');
|
$order_invoices = new Collection('OrderInvoice');
|
||||||
$order_invoices->where('id_order = '.(int)$this->id);
|
$order_invoices->where('id_order', '=', $this->id);
|
||||||
return $order_invoices;
|
return $order_invoices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -503,7 +503,7 @@ class OrderInvoiceCore extends ObjectModel
|
|||||||
public function getOrderPaymentCollection()
|
public function getOrderPaymentCollection()
|
||||||
{
|
{
|
||||||
$order_payments = new Collection('OrderPayment');
|
$order_payments = new Collection('OrderPayment');
|
||||||
$order_payments->where('id_order_invoice = '.(int)$this->id);
|
$order_payments->where('id_order_invoice', '=', $this->id);
|
||||||
return $order_payments;
|
return $order_payments;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -94,7 +94,7 @@ class OrderPaymentCore extends ObjectModel
|
|||||||
public static function getByInvoiceId($id_invoice)
|
public static function getByInvoiceId($id_invoice)
|
||||||
{
|
{
|
||||||
$payments = new Collection('OrderPayment');
|
$payments = new Collection('OrderPayment');
|
||||||
$payments->where('a.id_order_invoice = '.(int)$id_invoice);
|
$payments->where('id_order_invoice', '=', $id_invoice);
|
||||||
return $payments;
|
return $payments;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,9 +79,9 @@ class GroupShopCore extends ObjectModel
|
|||||||
public static function getGroupShops($active = true)
|
public static function getGroupShops($active = true)
|
||||||
{
|
{
|
||||||
$groups = new Collection('GroupShop');
|
$groups = new Collection('GroupShop');
|
||||||
$groups->where('deleted = 0');
|
$groups->where('deleted', '=', false);
|
||||||
if ($active)
|
if ($active)
|
||||||
$groups->where('active = 1');
|
$groups->where('active', '=', true);
|
||||||
return $groups;
|
return $groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ class ShopUrlCore extends ObjectModel
|
|||||||
{
|
{
|
||||||
$urls = new Collection('ShopUrl');
|
$urls = new Collection('ShopUrl');
|
||||||
if ($id_shop)
|
if ($id_shop)
|
||||||
$urls->where('id_shop = '.(int)$id_shop);
|
$urls->where('id_shop', '=', $id_shop);
|
||||||
return $urls;
|
return $urls;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -620,11 +620,12 @@ class StockManagerCore implements StockManagerInterface
|
|||||||
protected function getStockCollection($id_product, $id_product_attribute, $id_warehouse = null, $price_te = null)
|
protected function getStockCollection($id_product, $id_product_attribute, $id_warehouse = null, $price_te = null)
|
||||||
{
|
{
|
||||||
$stocks = new Collection('Stock');
|
$stocks = new Collection('Stock');
|
||||||
$stocks->where('a.id_product = '.(int)$id_product.' AND a.id_product_attribute = '.(int)$id_product_attribute);
|
$stocks->where('id_product', '=', $id_product);
|
||||||
|
$stocks->where('id_product_attribute', '=', $id_product_attribute);
|
||||||
if ($id_warehouse)
|
if ($id_warehouse)
|
||||||
$stocks->where('a.id_warehouse = '.(int)$id_warehouse);
|
$stocks->where('id_warehouse', '=', $id_warehouse);
|
||||||
if ($price_te)
|
if ($price_te)
|
||||||
$stocks->where('a.price_te = '.(float)$price_te);
|
$stocks->where('price_te', '=', $price_te);
|
||||||
|
|
||||||
return $stocks;
|
return $stocks;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -264,7 +264,7 @@ class SupplyOrderCore extends ObjectModel
|
|||||||
public function getEntriesCollection()
|
public function getEntriesCollection()
|
||||||
{
|
{
|
||||||
$details = new Collection('SupplyOrderDetail');
|
$details = new Collection('SupplyOrderDetail');
|
||||||
$details->where('a.id_supply_order = '.(int)$this->id);
|
$details->where('id_supply_order', '=', $this->id);
|
||||||
return $details;
|
return $details;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ class WarehouseProductLocationCore extends ObjectModel
|
|||||||
public static function getCollection($id_product)
|
public static function getCollection($id_product)
|
||||||
{
|
{
|
||||||
$collection = new Collection('WarehouseProductLocation');
|
$collection = new Collection('WarehouseProductLocation');
|
||||||
$collection->where('a.id_product = '.(int)$id_product);
|
$collection->where('id_product', '=', $id_product);
|
||||||
return $collection;
|
return $collection;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1089,12 +1089,13 @@ class AdminSupplyOrdersControllerCore extends AdminController
|
|||||||
if (count($ids) <= 0)
|
if (count($ids) <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
$orders = new Collection('SupplyOrder', $id_lang = (int)Context::getContext()->language->id);
|
$id_lang = Context::getContext()->language->id;
|
||||||
$orders->where('is_template = 0');
|
$orders = new Collection('SupplyOrder', $id_lang);
|
||||||
$orders->where('id_supply_order IN('.implode(', ', $ids).')');
|
$orders->where('is_template', '=', false);
|
||||||
|
$orders->where('id_supply_order', 'in', $ids);
|
||||||
$id_warehouse = $this->getCurrentWarehouse();
|
$id_warehouse = $this->getCurrentWarehouse();
|
||||||
if ($id_warehouse != -1)
|
if ($id_warehouse != -1)
|
||||||
$orders->where('id_warehouse = '.(int)$id_warehouse);
|
$orders->where('id_warehouse', '=', $id_warehouse);
|
||||||
$orders->getAll();
|
$orders->getAll();
|
||||||
$csv = new CSV($orders, $this->l('supply_orders'));
|
$csv = new CSV($orders, $this->l('supply_orders'));
|
||||||
$csv->export();
|
$csv->export();
|
||||||
|
|||||||
Reference in New Issue
Block a user