Commit 511a09a8 by Vladislav

#20207 Доработка изменения РК

1 parent fe85f62b
...@@ -45,9 +45,16 @@ class ProcessCallAPI implements ShouldQueue ...@@ -45,9 +45,16 @@ class ProcessCallAPI implements ShouldQueue
//считаем на сколько объектов зарезервировано получение данных //считаем на сколько объектов зарезервировано получение данных
//только их и запрашиваем //только их и запрашиваем
$limit = \App\Models\Limits::find($this->limitId); $limit = \App\Models\Limits::find($this->limitId);
//те на которые не хватило баллов помещаем в очередь
if ($apiR = $this->api->slice($limit->spent)) { $limits = Limits::getInstance($this->api->getToken());
dispatch(new ProcessCallLimitedAPI($apiR));
$maxObjects = $limits->countObjectsLimit($this->api);
if ($maxObjects and $maxObjects !== $limits::NAN && $this->api->getObjectsCount() > $maxObjects) {
//те на которые не хватило баллов помещаем в очередь
if ($apiR = $this->api->slice($maxObjects)) {
dispatch(new ProcessCallLimitedAPI($apiR));
}
} }
$response = $api->execute(); $response = $api->execute();
$limits->acceptRezerv($this->limitId, new HeaderLimits($response->headers())); $limits->acceptRezerv($this->limitId, new HeaderLimits($response->headers()));
......
...@@ -14,7 +14,8 @@ interface APIRequest{ ...@@ -14,7 +14,8 @@ interface APIRequest{
function getToken(): Tokens; function getToken(): Tokens;
function getApi(): string; function getApi(): string;
function slice($objects): ?APIRequest; function slice($maxObjects): ?APIRequest;
function sliceByKey($maxObjects, $key): ?APIRequest;
function call($params = null); function call($params = null);
function handle($response); function handle($response);
......
<?php <?php
namespace App\Service\Requests; namespace App\Service\Requests;
use App\Models\Tokens; use App\Models\Tokens;
use App\Service\API\API; use App\Service\API\API;
class APIRequest implements \App\Service\Contract\APIRequest { class APIRequest implements \App\Service\Contract\APIRequest
{
protected $api; protected $api;
protected $service; protected $service;
protected $method; protected $method;
protected $params; protected $params;
protected $token; protected $token;
protected function __construct($api){ protected function __construct($api)
{
$this->api = $api; $this->api = $api;
} }
static function getInstance($type){ static function getInstance($type)
switch($type){ {
switch ($type) {
case API::YANDEX: case API::YANDEX:
return new DirectRequest($type); return new DirectRequest($type);
default: default:
...@@ -73,6 +77,58 @@ class APIRequest implements \App\Service\Contract\APIRequest { ...@@ -73,6 +77,58 @@ class APIRequest implements \App\Service\Contract\APIRequest {
return $this->token; return $this->token;
} }
function sliceByKey($maxObjects, $key): ?\App\Service\Contract\APIRequest
{
$params = $this->getParams();
if (is_array($key)) {
$params_i = $params;
for ($i = 0; $i < count($key); $i++) {
$params_i = $params_i[$key[$i]];
}
$params_by_key = $params_i;
} else {
$params_by_key = $params[$key];
}
$replication = clone $this;
$objects = $this->sliceArray($params_by_key, 0, $maxObjects);
if (is_array($key)) {
$params = $this->changeInArray($params, $objects, $key);
} else {
$params[$key] = $this->sliceArray($params_by_key, $maxObjects);
}
$replication->setParams($params);
if (is_array($key)) {
$params = $this->changeInArray($params, $objects, $key);
} else {
$params[$key] = $this->sliceArray($params_by_key, $maxObjects);
}
$this->setParams($params);
return $replication;
}
private function sliceArray($params, $offset, $length = null): array
{
return array_values(array_slice($params, $offset, $length));
}
private function changeInArray($params, $objects, $key)
{
$params_i = &$params;
for ($i = 0; $i < count($key); $i++) {
$params_i = &$params_i[$key[$i]];
}
$params_i = $objects;
return $params;
}
function slice($count): ?\App\Service\Contract\APIRequest function slice($count): ?\App\Service\Contract\APIRequest
{ {
throw new Exception('Я не знаю формата запрсов, чтобы его разбить'); throw new Exception('Я не знаю формата запрсов, чтобы его разбить');
...@@ -83,15 +139,18 @@ class APIRequest implements \App\Service\Contract\APIRequest { ...@@ -83,15 +139,18 @@ class APIRequest implements \App\Service\Contract\APIRequest {
throw new Exception('Я не знаю формата запрсов, чтобы его разбить'); throw new Exception('Я не знаю формата запрсов, чтобы его разбить');
} }
function call($params = null){ function call($params = null)
{
} }
function handle($response){ function handle($response)
{
} }
function getObjectsCount(){ function getObjectsCount()
{
throw new Exception('Не задано сколкьо бъектов обрабатывается'); throw new Exception('Не задано сколкьо бъектов обрабатывается');
} }
} }
...@@ -6,6 +6,7 @@ use App\Jobs\ProcessCallLimitedAPI; ...@@ -6,6 +6,7 @@ use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Campaigns; use App\Models\Campaigns;
use App\Models\Pivots\DictionaryCampaign; use App\Models\Pivots\DictionaryCampaign;
use App\Models\Variable; use App\Models\Variable;
use App\Service\Contract\APIRequest;
use App\Service\Requests\DirectRequest; use App\Service\Requests\DirectRequest;
use App\Service\StrReplaceByVariables; use App\Service\StrReplaceByVariables;
use Carbon\Carbon; use Carbon\Carbon;
...@@ -29,11 +30,38 @@ class AddCampaigns extends DirectRequest ...@@ -29,11 +30,38 @@ class AddCampaigns extends DirectRequest
dispatch($process)->onQueue('limits'); dispatch($process)->onQueue('limits');
} }
public function getObjectsCount(){
$params = $this->getParams();
$cnt = count($params['Campaigns']);
return $cnt > self::MAX_COUNT ? self::MAX_COUNT : $cnt;
}
public function slice($maxObjects): ?APIRequest
{
$splinter = $this->sliceByKey($maxObjects, 'Campaigns');
$dictionaryCampaigns_splinter = $this->dictionaryCampaigns->slice($maxObjects)->values();
$splinter->putParams([
'dictionaryCampaigns' => $dictionaryCampaigns_splinter,
'variables' => $this->variables,
]);
$this->putParams([
'dictionaryCampaigns' => $this->dictionaryCampaigns->slice(0, $maxObjects),
'variables' => $this->variables,
]);
return $splinter;
}
public function handle($response) public function handle($response)
{ {
try { try {
if (!isset($response['result'])) { if (!isset($response['result'])) {
Log::debug($response); Log::debug($response);
Log::debug($this->getParams());
} }
foreach ($response['result']['AddResults'] as $key => $add_result) { foreach ($response['result']['AddResults'] as $key => $add_result) {
...@@ -42,6 +70,7 @@ class AddCampaigns extends DirectRequest ...@@ -42,6 +70,7 @@ class AddCampaigns extends DirectRequest
if (!$external_id) { if (!$external_id) {
Log::debug("AddCampaigns, empty Id"); Log::debug("AddCampaigns, empty Id");
Log::debug($add_result); Log::debug($add_result);
Log::debug($this->getParams());
continue; continue;
} }
...@@ -49,6 +78,7 @@ class AddCampaigns extends DirectRequest ...@@ -49,6 +78,7 @@ class AddCampaigns extends DirectRequest
'external_id' => $external_id, 'external_id' => $external_id,
'external_upload_at' => Carbon::now(), 'external_upload_at' => Carbon::now(),
]); ]);
} }
} catch (\Exception $e) { } catch (\Exception $e) {
Log::debug($e); Log::debug($e);
...@@ -75,70 +105,74 @@ class AddCampaigns extends DirectRequest ...@@ -75,70 +105,74 @@ class AddCampaigns extends DirectRequest
$bidding_strategy = $dictionaryCampaign->campaign->bidding_strategy; $bidding_strategy = $dictionaryCampaign->campaign->bidding_strategy;
if (!isset($bidding_strategy['Network']['NetworkDefault']) && $bidding_strategy['Network']['BiddingStrategyType'] !== 'HIGHEST_POSITION') { if ($bidding_strategy) {
// $bidding_strategy['Network']['NetworkDefault'] = null;
} elseif (isset($bidding_strategy['Network']['NetworkDefault']) && is_null($bidding_strategy['Network']['NetworkDefault']['LimitPercent'])) {
unset($bidding_strategy['Network']['NetworkDefault']);
}
if (isset($bidding_strategy['Network']['WbMaximumClicks']) && is_null($bidding_strategy['Network']['WbMaximumClicks']['BidCeiling'])) { if (!isset($bidding_strategy['Network']['NetworkDefault']) && $bidding_strategy['Network']['BiddingStrategyType'] === 'NETWORK_DEFAULT') {
unset($bidding_strategy['Network']['WbMaximumClicks']['BidCeiling']); $bidding_strategy['Network']['NetworkDefault'] = (object)[];
} } elseif (isset($bidding_strategy['Network']['NetworkDefault']) && is_null($bidding_strategy['Network']['NetworkDefault']['LimitPercent'])) {
unset($bidding_strategy['Network']['NetworkDefault']);
}
if (isset($bidding_strategy['Network']['WbMaximumConversionRate']) && is_null($bidding_strategy['Network']['WbMaximumConversionRate']['BidCeiling'])) { if (isset($bidding_strategy['Network']['WbMaximumClicks']) && is_null($bidding_strategy['Network']['WbMaximumClicks']['BidCeiling'])) {
unset($bidding_strategy['Network']['WbMaximumConversionRate']['BidCeiling']); unset($bidding_strategy['Network']['WbMaximumClicks']['BidCeiling']);
} }
if (isset($bidding_strategy['Network']['AverageCpc']) && is_null($bidding_strategy['Network']['AverageCpc']['BidCeiling'])) { if (isset($bidding_strategy['Network']['WbMaximumConversionRate']) && is_null($bidding_strategy['Network']['WbMaximumConversionRate']['BidCeiling'])) {
unset($bidding_strategy['Network']['AverageCpc']['BidCeiling']); unset($bidding_strategy['Network']['WbMaximumConversionRate']['BidCeiling']);
} }
if (isset($bidding_strategy['Network']['WeeklyClickPackage']) && is_null($bidding_strategy['Network']['WeeklyClickPackage']['BidCeiling'])) { if (isset($bidding_strategy['Network']['AverageCpc']) && is_null($bidding_strategy['Network']['AverageCpc']['BidCeiling'])) {
unset($bidding_strategy['Network']['WeeklyClickPackage']['BidCeiling']); unset($bidding_strategy['Network']['AverageCpc']['BidCeiling']);
} }
if (isset($bidding_strategy['Network']['AverageRoi']) && is_null($bidding_strategy['Network']['AverageRoi']['BidCeiling'])) { if (isset($bidding_strategy['Network']['WeeklyClickPackage']) && is_null($bidding_strategy['Network']['WeeklyClickPackage']['BidCeiling'])) {
unset($bidding_strategy['Network']['AverageRoi']['BidCeiling']); unset($bidding_strategy['Network']['WeeklyClickPackage']['BidCeiling']);
} }
if (isset($bidding_strategy['Network']['PayForConversion']) && is_null($bidding_strategy['Network']['PayForConversion']['WeeklySpendLimit'])) { if (isset($bidding_strategy['Network']['AverageRoi']) && is_null($bidding_strategy['Network']['AverageRoi']['BidCeiling'])) {
unset($bidding_strategy['Network']['PayForConversion']['WeeklySpendLimit']); unset($bidding_strategy['Network']['AverageRoi']['BidCeiling']);
} }
if (isset($bidding_strategy['Search']['WbMaximumClicks']) && is_null($bidding_strategy['Search']['WbMaximumClicks']['BidCeiling'])) { if (isset($bidding_strategy['Network']['PayForConversion']) && is_null($bidding_strategy['Network']['PayForConversion']['WeeklySpendLimit'])) {
unset($bidding_strategy['Search']['WbMaximumClicks']['BidCeiling']); unset($bidding_strategy['Network']['PayForConversion']['WeeklySpendLimit']);
} }
if (isset($bidding_strategy['Search']['WbMaximumConversionRate']) && is_null($bidding_strategy['Search']['WbMaximumConversionRate']['BidCeiling'])) { if (isset($bidding_strategy['Search']['WbMaximumClicks']) && is_null($bidding_strategy['Search']['WbMaximumClicks']['BidCeiling'])) {
unset($bidding_strategy['Search']['WbMaximumConversionRate']['BidCeiling']); unset($bidding_strategy['Search']['WbMaximumClicks']['BidCeiling']);
} }
if (isset($bidding_strategy['Search']['AverageCpc']) && is_null($bidding_strategy['Search']['AverageCpc']['BidCeiling'])) { if (isset($bidding_strategy['Search']['WbMaximumConversionRate']) && is_null($bidding_strategy['Search']['WbMaximumConversionRate']['BidCeiling'])) {
unset($bidding_strategy['Search']['AverageCpc']['BidCeiling']); unset($bidding_strategy['Search']['WbMaximumConversionRate']['BidCeiling']);
} }
if (isset($bidding_strategy['Search']['AverageCpa']) && is_null($bidding_strategy['Search']['AverageCpa']['BidCeiling'])) { if (isset($bidding_strategy['Search']['AverageCpc']) && is_null($bidding_strategy['Search']['AverageCpc']['BidCeiling'])) {
unset($bidding_strategy['Search']['AverageCpa']['BidCeiling']); unset($bidding_strategy['Search']['AverageCpc']['BidCeiling']);
} }
if (isset($bidding_strategy['Search']['AverageCpa']) && is_null($bidding_strategy['Search']['AverageCpa']['WeeklySpendLimit'])) { if (isset($bidding_strategy['Search']['AverageCpa']) && is_null($bidding_strategy['Search']['AverageCpa']['BidCeiling'])) {
unset($bidding_strategy['Search']['AverageCpa']['WeeklySpendLimit']); unset($bidding_strategy['Search']['AverageCpa']['BidCeiling']);
} }
if (isset($bidding_strategy['Search']['AverageRoi']) && is_null($bidding_strategy['Search']['AverageRoi']['BidCeiling'])) { if (isset($bidding_strategy['Search']['AverageCpa']) && is_null($bidding_strategy['Search']['AverageCpa']['WeeklySpendLimit'])) {
unset($bidding_strategy['Search']['AverageRoi']['BidCeiling']); unset($bidding_strategy['Search']['AverageCpa']['WeeklySpendLimit']);
} }
if (isset($bidding_strategy['Search']['AverageRoi']) && is_null($bidding_strategy['Search']['AverageRoi']['WeeklySpendLimit'])) { if (isset($bidding_strategy['Search']['AverageRoi']) && is_null($bidding_strategy['Search']['AverageRoi']['BidCeiling'])) {
unset($bidding_strategy['Search']['AverageRoi']['WeeklySpendLimit']); unset($bidding_strategy['Search']['AverageRoi']['BidCeiling']);
} }
if (isset($bidding_strategy['Search']['AverageRoi']) && is_null($bidding_strategy['Search']['AverageRoi']['Profitability'])) { if (isset($bidding_strategy['Search']['AverageRoi']) && is_null($bidding_strategy['Search']['AverageRoi']['WeeklySpendLimit'])) {
unset($bidding_strategy['Search']['AverageRoi']['Profitability']); unset($bidding_strategy['Search']['AverageRoi']['WeeklySpendLimit']);
} }
if (isset($bidding_strategy['Search']['AverageRoi']) && is_null($bidding_strategy['Search']['AverageRoi']['Profitability'])) {
unset($bidding_strategy['Search']['AverageRoi']['Profitability']);
}
if (isset($bidding_strategy['Search']['PayForConversion']) && is_null($bidding_strategy['Search']['PayForConversion']['WeeklySpendLimit'])) {
unset($bidding_strategy['Search']['PayForConversion']['WeeklySpendLimit']);
}
if (isset($bidding_strategy['Search']['PayForConversion']) && is_null($bidding_strategy['Search']['PayForConversion']['WeeklySpendLimit'])) {
unset($bidding_strategy['Search']['PayForConversion']['WeeklySpendLimit']);
} }
$data = [ $data = [
...@@ -216,10 +250,4 @@ class AddCampaigns extends DirectRequest ...@@ -216,10 +250,4 @@ class AddCampaigns extends DirectRequest
]); ]);
} }
function getObjectsCount(){
$params = $this->getParams();
$cnt = count($params['Campaigns']);
return $cnt > self::MAX_COUNT ? self::MAX_COUNT : $cnt;
}
} }
...@@ -12,14 +12,23 @@ class GetCampaigns extends DirectRequest ...@@ -12,14 +12,23 @@ class GetCampaigns extends DirectRequest
{ {
protected $timestamp; protected $timestamp;
function call($params = null) public function call($params = null)
{ {
$this->requestPrepare($params); $this->requestPrepare($params);
$process = new ProcessCallLimitedAPI($this); $process = new ProcessCallLimitedAPI($this);
dispatch($process)->onQueue('limits'); dispatch($process)->onQueue('limits');
} }
function handle($response) public function getObjectsCount()
{
$params = $this->getParams();
if (isset($params['SelectionCriteria']['Ids']) && count($params['SelectionCriteria']['Ids']) < self::MAX_COUNT){
return count($params['SelectionCriteria']['Ids']);
}
return self::MAX_COUNT;
}
public function handle($response)
{ {
try { try {
foreach ($response['result']['Campaigns'] as $campaign_data) { foreach ($response['result']['Campaigns'] as $campaign_data) {
...@@ -87,11 +96,4 @@ class GetCampaigns extends DirectRequest ...@@ -87,11 +96,4 @@ class GetCampaigns extends DirectRequest
$this->setParams($params); $this->setParams($params);
} }
function getObjectsCount(){
$params = $this->getParams();
if (isset($params['SelectionCriteria']['Ids']) && count($params['SelectionCriteria']['Ids']) < self::MAX_COUNT){
return count($params['SelectionCriteria']['Ids']);
}
return self::MAX_COUNT;
}
} }
...@@ -5,6 +5,7 @@ namespace App\Service\Requests\Direct; ...@@ -5,6 +5,7 @@ namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI; use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Campaigns; use App\Models\Campaigns;
use App\Models\Pivots\DictionaryCampaign; use App\Models\Pivots\DictionaryCampaign;
use App\Service\Contract\APIRequest;
use App\Service\Requests\DirectRequest; use App\Service\Requests\DirectRequest;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
...@@ -12,14 +13,26 @@ class ResumeCampaigns extends DirectRequest ...@@ -12,14 +13,26 @@ class ResumeCampaigns extends DirectRequest
{ {
CONST MAX_COUNT = 1000; CONST MAX_COUNT = 1000;
function call($params = null) public function call($params = null)
{ {
$this->requestPrepare($params); $this->requestPrepare($params);
$process = new ProcessCallLimitedAPI($this); $process = new ProcessCallLimitedAPI($this);
dispatch($process)->onQueue('limits'); dispatch($process)->onQueue('limits');
} }
function handle($response) public function getObjectsCount(){
$params = $this->getParams();
$cnt = count($params['SelectionCriteria']['Ids']);
return $cnt > self::MAX_COUNT ? self::MAX_COUNT : $cnt;
}
public function slice($maxObjects): ?APIRequest
{
return $this->sliceByKey($maxObjects, ['SelectionCriteria', 'Ids']);
}
public function handle($response)
{ {
try { try {
foreach ($response['result']['ResumeResults'] as $resume_result) { foreach ($response['result']['ResumeResults'] as $resume_result) {
...@@ -60,10 +73,4 @@ class ResumeCampaigns extends DirectRequest ...@@ -60,10 +73,4 @@ class ResumeCampaigns extends DirectRequest
$this->setParams($params); $this->setParams($params);
} }
function getObjectsCount(){
$params = $this->getParams();
$cnt = count($params['SelectionCriteria']['Ids']);
return $cnt > self::MAX_COUNT ? self::MAX_COUNT : $cnt;
}
} }
...@@ -5,6 +5,7 @@ namespace App\Service\Requests\Direct; ...@@ -5,6 +5,7 @@ namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI; use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Campaigns; use App\Models\Campaigns;
use App\Models\Pivots\DictionaryCampaign; use App\Models\Pivots\DictionaryCampaign;
use App\Service\Contract\APIRequest;
use App\Service\Requests\DirectRequest; use App\Service\Requests\DirectRequest;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
...@@ -13,14 +14,27 @@ class SuspendCampaigns extends DirectRequest ...@@ -13,14 +14,27 @@ class SuspendCampaigns extends DirectRequest
{ {
CONST MAX_COUNT = 1000; CONST MAX_COUNT = 1000;
function call($params = null) public function call($params = null)
{ {
$this->requestPrepare($params); $this->requestPrepare($params);
$process = new ProcessCallLimitedAPI($this); $process = new ProcessCallLimitedAPI($this);
dispatch($process)->onQueue('limits'); dispatch($process)->onQueue('limits');
} }
function handle($response) public function getObjectsCount()
{
$params = $this->getParams();
$cnt = count($params['SelectionCriteria']['Ids']);
return $cnt > self::MAX_COUNT ? self::MAX_COUNT : $cnt;
}
public function slice($maxObjects): ?APIRequest
{
return $this->sliceByKey($maxObjects, ['SelectionCriteria', 'Ids']);
}
public function handle($response)
{ {
try { try {
foreach ($response['result']['SuspendResults'] as $suspend_result) { foreach ($response['result']['SuspendResults'] as $suspend_result) {
...@@ -61,10 +75,4 @@ class SuspendCampaigns extends DirectRequest ...@@ -61,10 +75,4 @@ class SuspendCampaigns extends DirectRequest
$this->setParams($params); $this->setParams($params);
} }
function getObjectsCount(){
$params = $this->getParams();
$cnt = count($params['SelectionCriteria']['Ids']);
return $cnt > self::MAX_COUNT ? self::MAX_COUNT : $cnt;
}
} }
...@@ -6,6 +6,7 @@ use App\Jobs\ProcessCallLimitedAPI; ...@@ -6,6 +6,7 @@ use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Campaigns; use App\Models\Campaigns;
use App\Models\Pivots\DictionaryCampaign; use App\Models\Pivots\DictionaryCampaign;
use App\Models\Variable; use App\Models\Variable;
use App\Service\Contract\APIRequest;
use App\Service\Requests\DirectRequest; use App\Service\Requests\DirectRequest;
use App\Service\StrReplaceByVariables; use App\Service\StrReplaceByVariables;
use Carbon\Carbon; use Carbon\Carbon;
...@@ -24,6 +25,19 @@ class UpdateCampaigns extends DirectRequest ...@@ -24,6 +25,19 @@ class UpdateCampaigns extends DirectRequest
dispatch($process)->onQueue('limits'); dispatch($process)->onQueue('limits');
} }
public function getObjectsCount()
{
$params = $this->getParams();
$cnt = count($params['Campaigns']);
return $cnt > self::MAX_COUNT ? self::MAX_COUNT : $cnt;
}
public function slice($maxObjects): ?APIRequest
{
return $this->sliceByKey($maxObjects, 'Campaigns');
}
public function handle($response) public function handle($response)
{ {
try { try {
...@@ -127,10 +141,4 @@ class UpdateCampaigns extends DirectRequest ...@@ -127,10 +141,4 @@ class UpdateCampaigns extends DirectRequest
]); ]);
} }
function getObjectsCount(){
$params = $this->getParams();
$cnt = count($params['Campaigns']);
return $cnt > self::MAX_COUNT ? self::MAX_COUNT : $cnt;
}
} }
...@@ -20,21 +20,9 @@ class DirectRequest extends APIRequest { ...@@ -20,21 +20,9 @@ class DirectRequest extends APIRequest {
$this->url = config('api.yandex.url'); $this->url = config('api.yandex.url');
} }
function slice($count): ?\App\Service\Contract\APIRequest function slice($maxObjects): ?\App\Service\Contract\APIRequest
{ {
return null; return null;
if ($count<0)
return null;
//для запросов get ничего не разбиваем, т.к. заранее не знаем сколько чего будет
//для них только после выполнения запроса будет известно есть ли кроме $count еще данные
//а текущий запрос просто устанавливается в $count
//а вот для запросов мутаторов будем разбивать. Но тут уже будет зависеть от запроса
//будем под каждый реализовывать делитель
if (!isset($this->params['Page'])){
$this->params['Page'] = [];
}
$this->params['Page']['Limit'] = $count;
return null;
} }
function next($offset){ function next($offset){
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!