Fixes DB query that returns large result set when there are thousands of
subscribers
This commit is contained in:
@ -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(
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
Reference in New Issue
Block a user