Laravel Eloquent не может быть добавлен в базу данных - PullRequest
0 голосов
/ 28 декабря 2018

Я создаю приложение, которое работает как форма Google, используя Laravel 5.7.Вот таблица форм, которую я уже сделал:

1st page 2nd page Я сделал красноречивую модель, чтобы каждое имя в таблице личных данных содержало одну записькоторый содержит все эти таблицы и вставить заполненную таблицу в базу данных после нажатия кнопки отправки.Проблема в том, что он не был успешно вставлен в базу данных.Я не знаю, в чем проблема, вот мои коды:

PersonalDetails.php (красноречивая модель)

namespace App;

use Illuminate\Database\Eloquent\Model;

class PersonalDetails extends Model
{
    protected $table = 'personal_details';
    protected $guarded = ['id'];

public function accomodation()
{
    return $this->hasOne('App\Accomodation');
}

public function course()
{
    return $this->hasOne('App\Course');
}

public function proposedStudy()
{
    return $this->hasOne('App\ProposedStudy');
}

public function emergencyContact()
{
    return $this->hasOne('App\EmergencyContact');
}

public function englishTestResult()
{
    return $this->hasOne('App\EnglishTestResult');
}

public function homeInstitution()
{
    return $this->hasOne('App\HomeInstitution');
}

public function insurance()
{
    return $this->hasOne('App\Insurance');
}
}

FormController.php

public function submit(Request $request) {

    $request->validate([
        // Personal Details
        'fullname' => 'required|string',
        'nationality' => 'required|string',
        'date_of_birth' => 'required|string',
        'passport_number' => 'required|string',
        'issuing_country' => 'required|string',
        'date_of_issue' => 'required|string',
        'date_of_expiry' => 'required|string',
        'blood_type' => 'required|string',
        'marital_status' => 'required|string',
        'address' => 'required|string',
        'city' => 'required|string',
        'postal_code' => 'required|numeric',
        'province' => 'required|string',
        'country' => 'required|string',
        'phone' => 'required|string',
        'mobile' => 'required|string',
        'email' => 'required|email',
        'address2' => 'nullable|text',
        'city2' => 'nullable|string',
        'postal_code2' => 'nullable|numeric',
        'province2' => 'nullable|string',
        'country2' => 'nullable|string',
        'phone2' => 'nullable|string',
        'contact_name' => 'required|string',

        // Home Institution
        'name' => 'required|string',
        'address' => 'required|string',
        'phone' => 'required|string',
        'email' => 'required|email',
        'website' => 'required|string',
        'faculty_dep' => 'required|string',
        'start_year' => 'required|string',
        'gpa' => 'required|string',

        // Proposed Study
        'semester' => 'required|in:Semester I (Aug-Jan),Semester II (Feb-Jun)',
        'academic_year' => 'required|string',
        'faculty' => 'required|string',
        'department' => 'required|string',
        'study_period' => 'required|string',
        'start_date' => 'required|string',
        'end_date' => 'required|string',
        // Course
        'course_title' => 'required|string',
        'credit' => 'required|string',

        // English Test Result
        'test' => 'required|string',
        'score' => 'required|numeric',
        'test_center' => 'required|string',  
        'date_tested' => 'required|string',

        // Insurance
        'insurance_name' => 'required|string',
        'validity' => 'required|string',
        'cover' => 'required|string',

        // Accomodation
        'accomodation_help' => 'required|in:YES,NO',
        'adress' => 'required|string',
        'contact_person' => 'required|string',

        // Contact of Emergency
        'fullname' => 'required|string',
        'relationship' => 'required|string',
        'address' => 'required|string',
        'phone' => 'required|string',
        'mobile' => 'required|string',
        'email' => 'required|email',


    ]);

    PersonalDetails::create([
        'fullname' => $request->input('name'),
        'nationality' => $request->input('nationality'),
        'date_of_birth' => $request->input('dob'),
        'passport_number' => $request->input('passport'),
        'issuing_country' => $request->input('is_country'),
        'date_of_issue' => $request->input('doi'),
        'date_of_expiry' => $request->input('doe'),
        'blood_type' => $request->input('blood'),
        'marital_status' => $request->input('maritial'),
        'address' => $request->input('address'),
        'city' => $request->input('city'),
        'postal_code' => $request->input('postal'),
        'province' => $request->input('state'),
        'country' => $request->input('country'),
        'phone' => $request->input('phone'),
        'mobile' => $request->input('mobile'),
        'email' => $request->input('email'),
        'address2' => $request->input('address2'),
        'city2' => $request->input('city2'),
        'postal_code2' => $request->input('postal2'),
        'province2' => $request->input('state2'),
        'country2' => $request->input('country2'),
        'phone2' => $request->input('phone2'),
        'contact_name' => $request->input('contact_name'),
    ]);

    HomeInstitution::create([
        'name' =>  $request->input('institution'),
        'address' =>  $request->input('i_address'),
        'phone' =>  $request->input('i_phone'),
        'email' =>  $request->input('i_email'),
        'website' =>  $request->input('web'),
        'faculty_dep' =>  $request->input('faculty_dept'),
        'start_year' =>  $request->input('s_year'),
        'gpa' =>  $request->input('gpa'),
    ]);

    ProposedStudy::create([
        'semester' => $request->input('duration'),
        'academic_year' => $request->input('f_year') . '/' . $request->input('l_year'),
        'faculty' => $request->input('faculty'),
        'department' => $request->input('department'),
        'study_period' => $request->input('spesific_period'),
        'start_date' => $request->input('start_date'),
        'end_date' => $request->input('end_date'),
    ]);

    Course::create([
        'course_title' => $request->input('course_1'),
        'credit' => $request->input('credit_1'),
    ]);

    EnglishTestResult::create([
        'test' => $request->input('toefl'),
        'score' => $request->input('score_toefl'),
        'test_center' => $request->input('place_toefl'),     
        'date_tested' => $request->input('date_toefl'),
    ]);

    Insurance::create([
        'insurance_name' => $request->input('insurance'),
        'validity' => $request->input('valid_date'),
        'cover' => $request->input('cover'),
    ]);

    Accomodation::create([
        'accomodation_help' => $request->input('opt_acc'),
        'adress' => $request->input('adress_acc'),
        'contact_person' => $request->input('cp_acc'),
    ]);

    EmergencyContact::create([
        'fullname' => $request->input('emergency_name'),
        'relationship' => $request->input('relationship'),
        'address' => $request->input('address_emergency'),
        'phone' => $request->input('emergency_phone'),
        'mobile' => $request->input('emergency_mobile'),
        'email' => $request->input('emergency_email'),
    ]);

    // return back()-> with('success', 'Berhasil submit!');
}

Ответы [ 4 ]

0 голосов
/ 31 декабря 2018

Наконец, после всех этих попыток выяснить проблему, я просто понял, что в правилах валидации указано неверное имя.Имя в левой части правил проверки отличается от имени в html, поэтому я изменил имя в html и правилах проверки.

Большое дело в том, что я не отправил сообщение об ошибке проверки после отправки, чтобы ононе будет вставлен в базу данных.После того, как я поместил какое-то сообщение об ошибке, все поля вернули ошибку, которая говорит: «Атрибут: обязателен».Просто потому, что имя в валидации отличается от имени html: D

Спасибо, ребята, что помогли мне разобраться в проблеме, я решил ее:))

0 голосов
/ 28 декабря 2018

добавить $fillalbe в модели:

protected $fillable=['full_name','nationality','...']

вам необходимо указать атрибут fillalbe для модели.читать больше на https://laravel.com/docs/5.7/eloquent#mass-assignment

0 голосов
/ 29 декабря 2018

Можете ли вы проверить перенос таблицы или отношение модели, а затем пересмотреть контроллер формы.

Я создал пример из вашего кода и успешно вставил в базу данных.

Перенос личных данных

Schema::create('personal_details', function (Blueprint $table) {
        $table->increments('id');
        $table->string('fullname')->nullable();
        $table->string('nationality')->nullable();
        $table->timestamps();
    });

Миграция домашнего учреждения

Schema::create('home_institution', function (Blueprint $table) {
        $table->integer('personal_details_id')->unsigned()->primary();
        $table->string('name')->nullable();
        $table->string('address')->nullable();
        $table->timestamps();

        #Foreign to Table Personal Details.
        $table->foreign('personal_details_id')->references('id')->on('personal_details')->onUpdate('cascade')
            ->onDelete('cascade');

    });

Отношение модели личных данных

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class PersonalDetails extends Model
{
protected $guarded = ['id'];


public function homeInstitution()
{
    return $this->hasOne('App\HomeInstitution');
}

# Other your Relation

}

Form Controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\PersonalDetails;

class FormController extends Controller
{
public function index()
{
    return view('form.index');
}

public function submit(Request $request)
{
    $request->validate([
        // Personal Details
        'fullname' => 'required|string',
        'nationality' => 'required|string',
        // Home Institution
        'name' => 'required|string',
        'address' => 'required|string',
    ]);

    $pd = PersonalDetails::create(
        ['fullname' => $request->get('fullname'), 'nationality' => $request->get('nationality')]
    );

    # Insert into HomeInstitution => base on Model Relation from PersonalDetails
    $pd->homeinstitution()->create(
        ['name' => $request->get('name'), 'address' => $request->get('address')]
    );

    # Insert into other youR relation
    /*$pd->example()->create(
        []
    );*/


    return dd('Successfull Insert');
}
}

Может быть, это может помочь вам.

0 голосов
/ 28 декабря 2018

попробуйте указать путь к модели, если папка модели находится внутри приложения, то приложение \ модель;

eg:-
App\Insurance::create([
        'insurance_name' => $request->input('insurance'),
        'validity' => $request->input('valid_date'),
        'cover' => $request->input('cover'),
    ]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...