Привет!
Три таблицы.
users, verification_types, - хранит id, name и slug. Например, id = 1, name = 'Подтверждённый', slug = 'verificated'. users_verifications - id, user_id (связь с users`.`id), verification_id (связь с verification_types`.`id.
Хочу, чтобы при регистрации пользователя, можно было одной строчкой добавить запись в таблицу users_verifications запись по типу: id = USER_ID, verification_id = 1
Можно ли как-то параллельно записать данные путём отношений таблиц?
Имеются миграции, помимо стандартной таблицы users:
Таблица verification_types (Уровни верификации по типу: 1 = Гость, 2 = Подтвержден E-Mail и т.д.)
Schema::create('verification_types', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->comment('Название уровня верификации');
$table->string('slug')->comment('Системное название');
$table->timestamps();
});
Таблица users_verifications (Верификации по типу: user_id:1, verification_id:3 = Подтверждён номер и E-Mail и т.д.)
Schema::create('users_verifications', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned()->comment('ID пользователя');
$table->integer('verification_id')->unsigned()->comment('ID типа верификации');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('verification_id')->references('id')->on('verification_types')->onDelete('cascade');
});
Модель VerificationTypes
class VerificationTypes extends Authenticatable
{
...
public function userVerification() {
$this->belongsToMany('App/User');
}
}
Модель User
class User extends Authenticatable
{
use Notifiable;
use HasRoleAndPermission;
...
/**
* User -> Тип верификации
*/
public function verificationStatus() {
$this->belongsToMany('App\Entities\User\VerificationTypes', 'users_verifications', 'user_id', 'verification_id');
}
}
Контроллер RegisterController
class RegisterController extends Controller
{
...
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
$role = Role::where('slug', '=', 'guest')->first(); // Прикрепляем роль к пользователю
$user->attachRole($role);
/*
* Прикрепляем уровень верификации
*/
$user->verificationStatus()->attach([$user->id, 1]);
return $user;
}
}
Заранее спасибо!
Исправлено!
Ошибка была в том, что забыл в моделях return.
Потом, в таблицу добавлялись две записи. id=USER_ID, verification_id=1 и id=USER_ID, verification_id=USER_ID
Тогда просто вместо
$user->verificationStatus()->attach([$user->id, 1]);
Сделал:
$user->verificationStatus()->attach([1]);
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости