BidModifier.php
2.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
namespace App\Models;
use App\Models\Pivots\GoalBidModifier;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Collection;
class BidModifier extends Model
{
use SoftDeletes;
const LEVEL_CAMPAIGN = 'CAMPAIGN';
const LEVEL_AD_GROUP = 'AD_GROUP';
const TYPE_MOBILE_ADJUSTMENT = 'MOBILE_ADJUSTMENT';
const TYPE_DESKTOP_ADJUSTMENT = 'DESKTOP_ADJUSTMENT';
const TYPE_DEMOGRAPHICS_ADJUSTMENT = 'DEMOGRAPHICS_ADJUSTMENT';
const TYPE_RETARGETING_ADJUSTMENT = 'RETARGETING_ADJUSTMENT';
const TYPE_REGIONAL_ADJUSTMENT = 'REGIONAL_ADJUSTMENT';
const TYPE_VIDEO_ADJUSTMENT = 'VIDEO_ADJUSTMENT';
const TYPE_SMART_AD_ADJUSTMENT = 'SMART_AD_ADJUSTMENT';
protected $fillable = [
'external_id',
'campaign_external_id',
'ad_group_external_id',
'campaign_id',
'ad_group_id',
'level',
'type',
'mobile_adjustment',
'desktop_adjustment',
'demographics_adjustment',
'retargeting_adjustment',
'video_adjustment',
'regional_adjustment',
'updated_self',
'updated_at',
'deleted_at',
];
protected $casts = [
'mobile_adjustment' => 'json',
'desktop_adjustment' => 'json',
'demographics_adjustment' => 'json',
'retargeting_adjustment' => 'json',
'updated_self' => 'datetime',
];
/**
* @return Collection
*/
static public function getPropertiesWatch()
{
return collect([
'mobile_adjustment',
'desktop_adjustment',
'demographics_adjustment',
'retargeting_adjustment',
]);
}
public function getBidModifierValueAttribute()
{
if ($this->mobile_adjustment) {
return $this->mobile_adjustment['BidModifier'];
} elseif ($this->desktop_adjustment) {
return $this->desktop_adjustment['BidModifier'];
} elseif ($this->demographics_adjustment) {
return $this->demographics_adjustment['BidModifier'];
} elseif ($this->retargeting_adjustment) {
return $this->retargeting_adjustment['BidModifier'];
}
}
/**
* @param Builder $query
* @return Builder
*/
public function scopeForUpdatedSelf($query)
{
return $query->whereNotNull("{$query->getModel()->getTable()}.updated_self");
}
public function groups()
{
return $this->hasMany(AdGroup::class, 'ad_group_id');
}
public function campaign()
{
return $this->belongsTo(Campaigns::class, 'campaign_id');
}
public function campaignForEnabledForManaged()
{
return $this->campaign()->forEnabled()->forManaged();
}
public function goalBidModifiers()
{
return $this->hasMany(GoalBidModifier::class, 'bid_modifier_id');
}
}