class User extends Model {
public function isProvider()
{
return $this->role === 1;
}
public function isCustomer()
{
return $this->role === 2;
}
public function contracts()
{
if($this->isProvider())
return $this->hasMany(Contract::class, 'provider_id');
if($this->isCustomer())
return $this->hasMany(Contract::class, 'customer_id');
}
}
// что за юзер — провайдер или потребитель?
// по какому полю строить связь?
$contract->user()->associate($user);
Впрочем, судя по всему, достаточно на другой стороне подобную конструкцию с условиями сделать. Но могут быть проблемы: создали инстанс модели, provider_id
и customer_id
не заполнили — что в условиях проверять?