60 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace app\command;
 | |
| 
 | |
| use app\model\GoogleAdsAsset;
 | |
| use app\model\GoogleAdsAd;
 | |
| use app\model\GoogleAdsAssetRelations;
 | |
| use think\console\Command;
 | |
| use think\console\Input;
 | |
| use think\console\Output;
 | |
| use think\facade\Db;
 | |
| 
 | |
| class SyncGoogleAdsAsset extends Command
 | |
| {
 | |
|     protected function configure()
 | |
|     {
 | |
|         $this->setName('sync:google_ads_asset')
 | |
|             ->setDescription('Synchronize Google Ads Asset relations');
 | |
|     }
 | |
| 
 | |
|     protected function execute(Input $input, Output $output)
 | |
|     {
 | |
|         // 获取所有素材
 | |
|         $assets = GoogleAdsAsset::where('status', 1)->select();
 | |
| 
 | |
|         foreach ($assets as $asset) {
 | |
|             // 获取广告表中的所有广告
 | |
|             $ads = GoogleAdsAd::where('status', 1)->select();
 | |
| 
 | |
|             foreach ($ads as $ad) {
 | |
|                 // 检查广告的 metadata 是否包含素材的 resource_name
 | |
|                 if (isset($ad->metadata) && strpos($ad->metadata, $asset->resource_name) !== false) {
 | |
|                     // 插入关联记录
 | |
|                     $existingRelation = GoogleAdsAssetRelations::where('asset_id', $asset->asset_id)
 | |
|                         ->where('ad_id', $ad->ad_id)
 | |
|                         ->where('date', date('Y-m-d'))
 | |
|                         ->find();
 | |
| 
 | |
|                     if (!$existingRelation) {
 | |
|                         // 如果没有现有记录,则插入新的关联
 | |
|                         GoogleAdsAssetRelations::create([
 | |
|                             'asset_id' => $asset->asset_id,
 | |
|                             'ad_id' => $ad->ad_id,
 | |
|                             'ad_group_id' => $ad->ad_group_id,
 | |
|                             'campaign_id' => $ad->campaign_id,
 | |
|                             'date' => date('Y-m-d')
 | |
|                         ]);
 | |
| 
 | |
|                         $output->writeln("Inserted relation for Asset ID: {$asset->asset_id} and Ad ID: {$ad->ad_id}");
 | |
|                     } else {
 | |
|                         $output->writeln("Relation already exists for Asset ID: {$asset->asset_id} and Ad ID: {$ad->ad_id}");
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         $output->writeln('Google Ads Asset synchronization completed.');
 | |
|     }
 | |
| }
 |