ldc-crm/app/Models/Customer.php
Jérémy Munsch 787ee5a4c5 - tag 2.0.1
- Add Questions segementation
- Fix Customer delete Tests
2021-08-11 17:37:59 +02:00

106 lines
2.7 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Customer extends Model
{
use HasFactory;
protected $fillable = [
'email'
];
/**
* CustomerInfo hasMany relation
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function infos()
{
return $this->hasMany(CustomerInfo::class);
}
/**
* Get the CustomerInfo from a specific brand
*
* @param Brand $brand
* @return \Illuminate\Database\Eloquent\Builder
*/
public function info(Brand $brand)
{
return CustomerInfo::whereHas('brand', function (Builder $query) use ($brand) {
$query->where('id', $brand->id);
})->whereHas('customer', function (Builder $query) use ($brand) {
$query->where('id', $this->id);
});
}
/**
* CustomerLogin hasMany relation
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function logins()
{
return $this->hasMany(CustomerLogin::class);
}
/**
* Get the CustomerLogin from a specific brand
*
* @param Brand $brand
* @return \Illuminate\Database\Eloquent\Builder
*/
public function login(Brand $brand)
{
return CustomerLogin::whereHas('brand', function (Builder $query) use ($brand) {
$query->where('id', $brand->id);
})->whereHas('customer', function (Builder $query) use ($brand) {
$query->where('id', $this->id);
});
}
/**
* CustomerOptInHistory hasMany relation
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function optInHistory()
{
return $this->hasMany(CustomerOptInHistory::class);
}
/**
* Customer Brand belongsToMany relation
*
* @return \Illuminate\Database\Eloquent\Relations\belongsToMany
*/
public function brands()
{
return $this->belongsToMany(Brand::class, CustomerInfo::class);
}
/**
* Answers belongsToMany relation
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function answers()
{
return $this->belongsToMany(Answer::class, 'customer_answer');
}
public function setOptIn(Brand $brand, bool $optIn)
{
// Ajout dans la table d'historique des opt-in de la nouvelle valeur
$optInHistory = new CustomerOptInHistory();
$optInHistory->customer_id = $this->id;
$optInHistory->brand_id = $brand->id;
$optInHistory->new_value = $optIn;
$optInHistory->saveOrFail();
}
}