Fixes DB query that returns large result set when there are thousands of

subscribers
This commit is contained in:
Vlad
2017-02-14 21:07:40 -05:00
parent b90d7894ca
commit 440b7e4e6c
3 changed files with 7 additions and 10 deletions

View File

@ -48,7 +48,6 @@ class SendingQueue extends APIEndpoint {
APIError::NOT_FOUND => __('This newsletter is already being sent.', 'mailpoet') APIError::NOT_FOUND => __('This newsletter is already being sent.', 'mailpoet')
)); ));
} }
$queue = SendingQueueModel::where('newsletter_id', $newsletter->id) $queue = SendingQueueModel::where('newsletter_id', $newsletter->id)
->where('status', SendingQueueModel::STATUS_SCHEDULED) ->where('status', SendingQueueModel::STATUS_SCHEDULED)
->findOne(); ->findOne();
@ -73,9 +72,8 @@ class SendingQueue extends APIEndpoint {
$segment_ids = array_map(function($segment) { $segment_ids = array_map(function($segment) {
return $segment['id']; return $segment['id'];
}, $segments); }, $segments);
$subscribers = Subscriber::getSubscribedInSegments($segment_ids) $subscribers = Subscriber::getSubscribedInSegments($segment_ids)->findArray();
->findArray(); $subscribers = Helpers::arrayColumn($subscribers, 'id');
$subscribers = Helpers::arrayColumn($subscribers, 'subscriber_id');
$subscribers = array_unique($subscribers); $subscribers = array_unique($subscribers);
if(!count($subscribers)) { if(!count($subscribers)) {
return $this->errorResponse(array( return $this->errorResponse(array(

View File

@ -76,9 +76,8 @@ class Scheduler {
}, $segments); }, $segments);
// ensure that subscribers are in segments // ensure that subscribers are in segments
$subscribers = Subscriber::getSubscribedInSegments($segment_ids) $subscribers = Subscriber::getSubscribedInSegments($segment_ids)->findArray();
->findArray(); $subscribers = Helpers::arrayColumn($subscribers, 'id');
$subscribers = Helpers::arrayColumn($subscribers, 'subscriber_id');
$subscribers = array_unique($subscribers); $subscribers = array_unique($subscribers);
if(empty($subscribers)) { if(empty($subscribers)) {
@ -107,9 +106,8 @@ class Scheduler {
$segment_ids = array_map(function($segment) { $segment_ids = array_map(function($segment) {
return $segment['id']; return $segment['id'];
}, $segments); }, $segments);
$subscribers = Subscriber::getSubscribedInSegments($segment_ids) $subscribers = Subscriber::getSubscribedInSegments($segment_ids)->findArray();
->findArray(); $subscribers = Helpers::arrayColumn($subscribers, 'id');
$subscribers = Helpers::arrayColumn($subscribers, 'subscriber_id');
$subscribers = array_unique($subscribers); $subscribers = array_unique($subscribers);
// update current queue // update current queue

View File

@ -448,6 +448,7 @@ class Subscriber extends Model {
'subscribers.id = relation.subscriber_id', 'subscribers.id = relation.subscriber_id',
'subscribers' 'subscribers'
) )
->select('subscribers.id')
->whereNull('subscribers.deleted_at') ->whereNull('subscribers.deleted_at')
->where('subscribers.status', 'subscribed'); ->where('subscribers.status', 'subscribed');
return $subscribers; return $subscribers;