2017-01-09 1 views
2

У меня есть взаимно однозначное отношение.laravel один-на-один уникальный contrait

class User extends Model 
{ 
    public $timestamps = false; 

    public function profile() 
    { 
     return $this->hasOne(Profile::class); 
    } 
} 

class Profile extends Model 
{ 
    public $timestamps = false; 
} 

Я хочу, чтобы создать пользователя с одного профиля:

$user = User::firstOrCreate([ 
    'name' => 'John', 
    'email' => '[email protected]' 
]); 
$profile = new Profile([ 
    'age' => 'age', 
    'sex' => 'sex' 
]); 
$user->profile()->save($profile); 

Выполнение этой команды несколько раз создает один пользователь с несколькими профилями без исключения/предупредив, что модель пользователя будет иметь несколько отношений. Как создать ограничение или убедиться, что у пользователя будет только один профиль?

Update:

Потому что моя команда может выполняться несколько раз, unique на profile_id сгенерирует исключение, которое не является идеальным в моем случае. Я в конечном итоге делает что-то вроде этого:

$user = User::firstOrCreate([ 
    'name' => 'John', 
    'email' => '[email protected]' 
]); 
$user->profile()->firstOrCreate([ 
    'age' => 'age', 
    'sex' => 'sex' 
]); 

ответ

3

Вы можете:

  1. Набор user_id в unique()
  2. проверить вручную, если профиль уже существует $user->profile()->isEmpty()
  3. Используйте updateOrCreate() или firstOrCreate() методы.