Вставить данные из многошаговой формы с Laravel Отношения - PullRequest
0 голосов
/ 11 марта 2020

У меня есть вопрос к вам.

У меня есть многоэтапная форма:

  1. Кредит (отправляется с калькулятора)
  2. Создать аккаунт (электронная почта + пароль)
  3. Личные данные (имя, фамилия, номер телефона и т. Д. c ...)
  4. Адреса (улица, город, штат + если адрес для переписки и т. д. c ...)
  5. Занятость (имя работодателя, адрес работодателя и т. д. c ...)
  6. Фини sh (просмотрите свои данные раньше отправка ...)

общее количество входов в форме составляет 60

Я хотел бы разбить его на несколько таблиц

  1. пользователи
  2. ссуды
  3. личные
  4. адреса
  5. eployment

Пока я пробовал это, но что-то говорит мне, что этот метод не очень безопасен, даже если он работает.

Поэтому я обращаюсь за советом и помощью, как вы сделали бы что-то подобное?

Модель пользователя. php

class User extends Authenticatable
{
    use Notifiable;
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'email', 'password',
    ];
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
    public function loans() {
        return $this->belongsToMany(Loan::class)->withTimestamps();
    }
    public function personal() {
        return $this->belongsTo(Personal::class);
    }
    public function adress() {
        return $this->belongsTo(Adress::class);
    }
    public function employment() {
        return $this->belongsTo(Eployment::class);
    }
}

Модель займа. php

class Loan extends Model
{
    protected $hidden = ['amount', 'month', 'payment'];
    public function users() {
        return $this->belongsToMany(User::class)->withTimestamps();
    }
}

Модель Персональная. php

class Personal extends Model
{
    protected $fillable = [
        'first_name', 'last_name', 'identification_number', 'identity_card_number', 'date_of_birth', 'phone'
    ];
    public function users() {
        return $this->hasMany(User::class);
    }
}

Модель Адрес. php

protected $fillable = [
        'adress', 'adress_number', 'city', 'postcode', 'country', 'correspond_adress', 'correspond_adress_number', 'correspond_city', 'correspond_postcode', 'correspond_country', 'type_of_housing', 'since_year', 'marital_status', 'number_of_kids'
    ];
    public function users() {
        return $this->hasMany(User::class);
    }

Модель Занятость. php

class Eployment extends Model
{
    protected $fillable = [
        'type_of_occupation', 'client_ico', 'client_dic', 'employer_name', 'employer_ico', 'employment_adress', 'employment_city', 'month_of_arrival', 'year_of_arrival', 'net_monthly_income', 'other_income', 'payment_method', 'expenditure_payments', 'loan_repayments', 'wage_deductions', 'other_expenditure', 'have_bank_account', 'iban_account'
    ];
    public function users() {
        return $this->hasMany(User::class);
    }
}

БД: (пользователи, кредиты, личные, адреса, электронная занятость

Schema::create('users', function (Blueprint $table) {
    $table->id();
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
});

Schema::create('loans', function (Blueprint $table) {
    $table->id();
    $table->string('amount');
    $table->string('month');
    $table->string('payment');
    $table->timestamps();
});

Schema::create('loan_user', function (Blueprint $table) {
    $table->id();
    $table->unsignedBigInteger('user_id');
    $table->unsignedBigInteger('loan_id');
    $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
    $table->foreign('loan_id')->references('id')->on('loans')->onUpdate('cascade')->onDelete('cascade');
    $table->timestamps();
});

Schema::create('adresses', function (Blueprint $table) {
    $table->id();
    $table->unsignedBigInteger('user_id');
    $table->string('adress');
    $table->string('adress_number');
    $table->string('city');
    $table->string('postcode');
    $table->string('country');
    $table->string('correspond_adress')->nullable();
    $table->string('correspond_adress_number')->nullable();
    $table->string('correspond_city')->nullable();
    $table->string('correspond_postcode')->nullable();
    $table->string('correspond_country')->nullable();
    $table->string('type_of_housing');
    $table->string('since_year');
    $table->string('marital_status');
    $table->string('number_of_kids');
    $table->timestamps();
    $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
});

Schema::create('eployments', function (Blueprint $table) {
    $table->id();
    $table->unsignedBigInteger('user_id');
    $table->string('type_of_occupation');
    $table->string('client_ico')->nullable();
    $table->string('client_dic')->nullable();
    $table->string('employer_name')->nullable();
    $table->string('employer_ico')->nullable();
    $table->string('employment_adress')->nullable();
    $table->string('employment_city')->nullable();
    $table->string('month_of_arrival')->nullable();
    $table->string('year_of_arrival')->nullable();
    $table->string('net_monthly_income');
    $table->string('other_income')->nullable();
    $table->string('payment_method');
    $table->string('expenditure_payments');
    $table->string('loan_repayments')->nullable();
    $table->string('wage_deductions')->nullable();
    $table->string('other_expenditure')->nullable();
    $table->string('have_bank_account');
    $table->string('iban_account');
    $table->timestamps();
    $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
});

LoanController. php

public function store(Loan $loan, User $user, Personal $personal, Adress $adress, Eployment $eployment, Request $request)
    {
        $user = User::create([
            'email' => $request->email,
            'password' => Hash::make($request->password),
        ]);

        $data = new Loan;
        $data->amount = $request->amount;
        $data->month = $request->month;
        $data->payment = $request->payment;

        $personal = new Personal;
        $personal->user_id = $user->id;
        $personal->first_name = $request->first_name;
        $personal->last_name = $request->last_name;
        $personal->identification_number = $request->identification_number;
        $personal->identity_card_number = $request->identity_card_number;
        $personal->date_of_birth = $request->date_of_birth;
        $personal->phone = $request->phone;

        $adress = new Adress;
        $adress->user_id = $user->id;
        $adress->adress = $request->adress;
        $adress->adress_number = $request->adress_number;
        $adress->city = $request->city;
        $adress->postcode = $request->postcode;
        $adress->country = $request->country;
        $adress->correspond_adress = $request->correspond_adress;
        $adress->correspond_adress_number = $request->correspond_adress_number;
        $adress->correspond_city = $request->correspond_city;
        $adress->correspond_postcode = $request->correspond_postcode;
        $adress->correspond_country = $request->correspond_country;
        $adress->type_of_housing = $request->type_of_housing;
        $adress->since_year = $request->since_year;
        $adress->marital_status = $request->marital_status;
        $adress->number_of_kids = $request->number_of_kids;

        $eployment = new Eployment;
        $eployment->user_id = $user->id;
        $eployment->type_of_occupation = $request->type_of_occupation;
        $eployment->client_ico = $request->client_ico;
        $eployment->client_dic = $request->client_dic;
        $eployment->employer_name = $request->employer_name;
        $eployment->employer_ico = $request->employer_ico;
        $eployment->employment_adress = $request->employment_adress;
        $eployment->employment_city = $request->employment_city;
        $eployment->month_of_arrival = $request->month_of_arrival;
        $eployment->year_of_arrival = $request->year_of_arrival;
        $eployment->net_monthly_income = $request->net_monthly_income;
        $eployment->other_income = $request->other_income;
        $eployment->payment_method = $request->payment_method;
        $eployment->expenditure_payments = $request->expenditure_payments;
        $eployment->loan_repayments = $request->loan_repayments;
        $eployment->wage_deductions = $request->wage_deductions;
        $eployment->other_expenditure = $request->other_expenditure;
        $eployment->have_bank_account = $request->have_bank_account;
        $eployment->iban_account = $request->iban_account;

        $data->save();

        $user->personal()->associate($user);
        $personal->save();

        $user->adress()->associate($user);
        $adress->save();

        $user->eployment()->associate($user);
        $eployment->save();

        $user->loans()->attach($data);

        return redirect('/');
    }

Я не знаю, правильно ли я понял Laravel Отношения, но я пытаюсь ...

Извините, мой Engli sh Я - словацкий, и я помог с Google Translator

1 Ответ

0 голосов
/ 11 марта 2020

Что ж, если вы хотите сделать все с помощью одного запроса (создание большой формы и манипулирование ею с помощью JS), ваш метод store довольно хорош.

Вы должны удалить Loan $loan, User $user, Personal $personal, Adress $adress, Eployment $eployment, из метода store, потому что Вы не используете привязку маршрута модели для этого: https://laravel.com/docs/5.8/routing#route -model-binding .

Также вам не нужно связывать ($user->personal()->associate($user);) или прикреплять все, потому что вы уже добавляете user_id для каждой модели, которую вы создаете.

Также не забудьте проверить форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...