108 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace app\model;
 | |
| 
 | |
| use think\Model;
 | |
| 
 | |
| class Campaign extends Model
 | |
| {
 | |
|     // 设置当前模型对应的完整数据表名称
 | |
|     protected $table = 'bps.bps_google_ads_campaign';
 | |
| 
 | |
|     // 设置主键
 | |
|     protected $pk = 'campaign_id';
 | |
| 
 | |
|     // 设置自动时间戳
 | |
|     protected $autoWriteTimestamp = true;
 | |
| 
 | |
|     // 定义时间戳字段
 | |
|     protected $createTime = 'create_at';
 | |
|     protected $updateTime = 'update_at';
 | |
| 
 | |
|     // 设置字段类型和默认值
 | |
|     protected $casts = [
 | |
|         'campaign_id' => 'int',
 | |
|         'customer_id' => 'int',
 | |
|         'budget_amount_micros' => 'int',
 | |
|     ];
 | |
| 
 | |
|     // 默认值设置
 | |
|     protected $defaults = [
 | |
|         'status' => 'ENABLED', // 活动状态默认值为 'ENABLED'
 | |
|         'advertising_channel_type' => 'SEARCH', // 广告渠道类型默认值为 'SEARCH'
 | |
|     ];
 | |
| 
 | |
| 
 | |
|     // 状态判断常量
 | |
|     const STATUS_UNSPECIFIED = 0;
 | |
|     const STATUS_UNKNOWN = 1;
 | |
|     const STATUS_ENABLED = 2;
 | |
|     const STATUS_PAUSED = 3;
 | |
|     const STATUS_REMOVED = 4;
 | |
| 
 | |
|     // 获取活动状态
 | |
|     public function getStatusTextAttr($value, $data)
 | |
|     {
 | |
|         $statusMap = [
 | |
|             self::STATUS_UNSPECIFIED => 'UNSPECIFIED',
 | |
|             self::STATUS_UNKNOWN => 'UNKNOWN',
 | |
|             self::STATUS_ENABLED => 'ENABLED',
 | |
|             self::STATUS_PAUSED => 'PAUSED',
 | |
|             self::STATUS_REMOVED => 'REMOVED',
 | |
|         ];
 | |
|         return $statusMap[$data['status']] ?? 'UNKNOWN';
 | |
|     }
 | |
| 
 | |
|     // 更新状态方法
 | |
| //    public function updateStatus($status)
 | |
| //    {
 | |
| //        if (!in_array($status, [self::STATUS_ENABLED, self::STATUS_PAUSED, self::STATUS_REMOVED])) {
 | |
| ////            throw new \think\exception\ValidateException('Invalid status');
 | |
| //        }
 | |
| //        $this->status = $status;
 | |
| //        return $this->save();
 | |
| //    }
 | |
| 
 | |
| 
 | |
| 
 | |
|     // 判断当前活动状态
 | |
|     public function isEnabled()
 | |
|     {
 | |
|         return $this->status == self::STATUS_ENABLED;
 | |
|     }
 | |
| 
 | |
|     public function isPaused()
 | |
|     {
 | |
|         return $this->status == self::STATUS_PAUSED;
 | |
|     }
 | |
| 
 | |
|     public function isRemoved()
 | |
|     {
 | |
|         return $this->status == self::STATUS_REMOVED;
 | |
|     }
 | |
| 
 | |
| 
 | |
|     // 关联 Customer 模型(广告活动属于客户)
 | |
| //    public function customer()
 | |
| //    {
 | |
| //        return $this->belongsTo(GoogleAdsCustomer::class, 'customer_id', 'customer_id');
 | |
| //    }
 | |
| 
 | |
|     // 关联 AdGroup 模型(一个广告活动下有多个广告组)
 | |
|     public function adGroups()
 | |
|     {
 | |
|         return $this->hasMany(AdGroup::class, 'campaign_id', 'campaign_id');
 | |
|     }
 | |
| 
 | |
|     // 关联 Ad 模型(一个广告活动下有多个广告)
 | |
|     public function ads()
 | |
|     {
 | |
|         return $this->hasManyThrough(Ad::class, GoogleAdsAdGroup::class, 'campaign_id', 'ad_group_id', 'campaign_id', 'ad_group_id');
 | |
|     }
 | |
| 
 | |
|     // 关联到广告数据表
 | |
|     public function adDayData()
 | |
|     {
 | |
|         return $this->hasMany(DayData::class, 'campaign_id', 'campaign_id');
 | |
|     }
 | |
| } |