Commit c3851246 by Евгений

Доработал синхрон данных в кеше БД из основных в целевые

1 parent 8a52ff1b
......@@ -4,11 +4,13 @@ namespace App\Console\Commands;
use App\Models\AdGroup;
use App\Models\Campaigns;
use App\Models\Dictionary;
use App\Models\Keyword;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Pivots\GoalAdGroup;
use App\Models\Pivots\GoalKeyword;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class DictionaryCampaignsSyncByCampaign extends Command
{
......@@ -43,56 +45,92 @@ class DictionaryCampaignsSyncByCampaign extends Command
*/
public function handle()
{
Campaigns::has('dictionaryCampaignSynchronizedNeedSynced')->forManaged()->get()->each(function (Campaigns $campaign) {
$campaign->load([
'groupsForNotKeywordsLoadable.keywords',
'dictionaryCampaignSynchronizedNeedSynced'
]);
$campaign->dictionaryCampaignSynchronizedNeedSynced->each(function (DictionaryCampaign $dictionaryCampaign) use ($campaign) {
$campaign->groupsForNotKeywordsLoadable->each(function (AdGroup $adGroup) use ($dictionaryCampaign) {
$goalAdGroup = GoalAdGroup::updateOrCreateByMain($adGroup, $dictionaryCampaign);
$data_keywords = $adGroup->keywords->map(function (Keyword $keyword) use ($goalAdGroup, $dictionaryCampaign) {
return GoalKeyword::getDataByMain($keyword, $goalAdGroup, $dictionaryCampaign);
})->toArray();
GoalKeyword::upsert($data_keywords, [
'dictionary_campaign_id',
'goal_ad_group_id',
'keyword_id',
], [
'dictionary_campaign_id',
'dictionary_campaign_external_id',
'goal_ad_group_id',
'goal_ad_group_external_id',
'keyword_id',
]);
$goalKeywordQuery = GoalKeyword::where('dictionary_campaign_id', $dictionaryCampaign->getKey())
->where('goal_ad_group_id', $goalAdGroup->getKey());
if (count($data_keywords)) {
$goalKeywordQuery->whereNotIn('keyword_id', array_column($data_keywords, 'keyword_id'));
}
$goalKeywords = $goalKeywordQuery->get();
$goalKeywords->each(function (GoalKeyword $goalKeyword) {
$goalKeyword->delete();
});
});
$dictionaryCampaign->update([
'synced_need' => null,
]);
});
});
// Campaigns::has('dictionaryCampaignSynchronizedNeedSynced')->forManaged()->get()->each(function (Campaigns $campaign) {
// $campaign->load([
// 'groupsForNotKeywordsLoadable.keywords',
// 'dictionaryCampaignSynchronizedNeedSynced'
// ]);
////хоть и есть нужные, а тут они не выберутся. Видимо потому что был сбой, а в кампании записано что все хорошо
// $campaign->dictionaryCampaignSynchronizedNeedSynced->each(function (DictionaryCampaign $dictionaryCampaign) use ($campaign) {
//
// $campaign->groupsForNotKeywordsLoadable->each(function (AdGroup $adGroup) use ($dictionaryCampaign) {
//
// $goalAdGroup = GoalAdGroup::updateOrCreateByMain($adGroup, $dictionaryCampaign);
//
// $data_keywords = $adGroup->keywords->map(function (Keyword $keyword) use ($goalAdGroup, $dictionaryCampaign) {
// return GoalKeyword::getDataByMain($keyword, $goalAdGroup, $dictionaryCampaign);
// })->toArray();
//
// GoalKeyword::upsert($data_keywords, [
// 'dictionary_campaign_id',
// 'goal_ad_group_id',
// 'keyword_id',
// ], [
// 'dictionary_campaign_id',
// 'dictionary_campaign_external_id',
// 'goal_ad_group_id',
// 'goal_ad_group_external_id',
// 'keyword_id',
// ]);
//
// $goalKeywordQuery = GoalKeyword::where('dictionary_campaign_id', $dictionaryCampaign->getKey())
// ->where('goal_ad_group_id', $goalAdGroup->getKey());
//
// if (count($data_keywords)) {
// $goalKeywordQuery->whereNotIn('keyword_id', array_column($data_keywords, 'keyword_id'));
// }
//
// $goalKeywords = $goalKeywordQuery->get();
//
// $goalKeywords->each(function (GoalKeyword $goalKeyword) {
// $goalKeyword->delete();
// });
//
// });
//
// $dictionaryCampaign->update([
// 'synced_need' => null,
// ]);
//
// });
//
// });
$cities = Dictionary::where('token_id', '>', 0)->get();
foreach ($cities as $city){
//грузиим РК которых по какой то причне нет в целевых.
DB::insert("
INSERT INTO dictionary_campaigns(campaign_id, dictionary_id, name, negative_keywords, excluded_sites)
SELECT c.id, {$city->id}, c.name, c.negative_keywords, c.excluded_sites
FROM campaigns c
LEFT JOIN dictionary_campaigns dc on c.id = dc.campaign_id AND dc.dictionary_id={$city->id}
WHERE dc.campaign_id is null AND c.manage=1
");
}
//грузим группы которых по какой то причне нет в целевых.
DB::insert("
INSERT INTO goal_ad_groups(ad_group_id, dictionary_campaign_external_id, dictionary_campaign_id, name, negative_keywords)
SELECT a.id, dc.external_id, dc.id, a.name, a.negative_keywords
FROM ad_groups a
INNER JOIN campaigns c on a.campaign_id = c.id
INNER JOIN dictionary_campaigns dc on c.id = dc.campaign_id
LEFT JOIN goal_ad_groups gag on a.id = gag.ad_group_id
WHERE gag.ad_group_id is null
");
//грузим ключевые фразы которых по какой то причне нет в целевых.
DB::insert("
INSERT INTO goal_keywords(dictionary_campaign_external_id, goal_ad_group_external_id, dictionary_campaign_id,
goal_ad_group_id, keyword_id)
SELECT gag.dictionary_campaign_id, gag.external_id, gag.dictionary_campaign_id, gag.id, k.id
FROM keywords k
INNER JOIN ad_groups ag on k.ad_group_id = ag.id
INNER JOIN goal_ad_groups gag on ag.id = gag.ad_group_id
LEFT JOIN goal_keywords gk on k.id = gk.keyword_id
WHERE gk.keyword_id is null
");
return 0;
}
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!