Добавление модели (Relationships Laravel)

202
30 ноября 2017, 03:18

Привет! Три таблицы. 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;
    }
}

Заранее спасибо!

Answer 1

Исправлено! Ошибка была в том, что забыл в моделях return.

Потом, в таблицу добавлялись две записи. id=USER_ID, verification_id=1 и id=USER_ID, verification_id=USER_ID Тогда просто вместо

$user->verificationStatus()->attach([$user->id, 1]);

Сделал:

$user->verificationStatus()->attach([1]);
READ ALSO
Вывод json строк в php

Вывод json строк в php

ЗдравствуйтеИмеется код:

319
Как работают сайты заказов чего либо? [требует правки]

Как работают сайты заказов чего либо? [требует правки]

Как работают доставки пиццы или любой другой ресурс подразумевающий систему заказов? Как реализован сам механизм заказа? Это PHP + MySQL? Или...

305
Обработка формы с помощью ООП

Обработка формы с помощью ООП

Я создал класс формы

329
Как в GridView yii2 изменить view?

Как в GridView yii2 изменить view?

То есть сейчас выводится стандартная таблица yii, хочу поменять шаблон вывода на подобии itemView

432