Сделайте оператор inbetween в массиве PHP - PullRequest
0 голосов
/ 31 июля 2011

Мне нужно разбить большое количество записей, и я смог вытащить первые 6000, используя простое выражение lteq, но я не могу понять, как вытащить еще 6k-файлы.

Этот код работает, но вызывает ошибку памяти:

$filterData = array( 
'product_id' => array(14001, 'to'=> 17000)
);  

Мне нужно сделать цикл, который будет идти из этого:

$filterData = array( 
'product_id' => array('lteq' => 6000)
); 

Вот еще код:

// get all my database products into an array
$products = $client->call($session, 'catalog_product.list', array($filterData));

А затем перейти к следующему массиву 6001 - 12000

Есть идеи?

Вот правильный вызов Magento / API / Soap / Filter:

$filterData = array( 
'product_id' => array('from' => 6001, 'to' => 10000)
); 

Используйте "from" и "to", чтобы извлечь все записи между ними.


Код в комментарии:

$client = new SoapClient($myDomain.'/api/?wsdl');
$session = $client->login($myAPILogin, $myAPIKey);

//some filter date to pass to the API - add more to filter your results further - see Magento API docs
//$filterData = array('type'=>'simple');
$filterData = array( 'product_id' => array('from' => 6001), array('to' => 7000) );

//get all my database products into an array
$products = $client->call($session, 'catalog_product.list', array($filterData));

Ответы [ 3 ]

0 голосов
/ 31 июля 2011

Попробуйте установить:

ini_set('memory_limit', -1);

Перед вызовом $client->call(), если safe_mode равно On, необходимо изменить файл php.ini.

Другое решение - использовать LIMIT / TOP в SQL и обрабатывать записи небольшими порциями.

0 голосов
/ 01 августа 2011

Вот правильный вызов Magento / API / Soap / Filter:

$filterData = array( 
'product_id' => array('from' => 6001, 'to' => 10000)
); 

Используйте "from" и "to", чтобы вытащить все промежуточные записи.

0 голосов
/ 31 июля 2011

Используйте оператор модуля, возможно?

...