Laravel более простой способ сохранить несколько полей ввода в базу данных

Я пытаюсь сохранить длинные данные в базе данных. До сих пор я получаю значение формы из объекта запроса и устанавливаю его для модели базы данных. Это прекрасно работает. Но я хочу знать, есть ли другой способ эффективно инициализировать модель без необходимости устанавливать каждое значение. Моя модель имеет отношение один к одному.

Я так делал. Но я не думаю, что это правильный способ

//Student details
            $studentDetail->student_first_name = $request->input('studentFirstName');
            $studentDetail->student_last_name = $request->input('studentLastName');
            $studentDetail->student_phone_number = $request->input('studentPhoneNumber');
            $studentDetail->student_date_of_birth = $request->input('studentDOB');
            $studentDetail->student_email = $request->input('studentEmail');
            $studentDetail->save();

            $studentAddress = new Address();
            $studentAddress->address_1 = $request->input('studentAddress1');
            $studentAddress->address_2 = $request->input('studentAddress2');
            $studentAddress->city = $request->input('studentCity');
            $studentAddress->state = $request->input('studentState');
            $studentAddress->country = $request->input('studentCountry');
            $studentAddress->post_code = $request->input('studentPostCode');
            $studentDetail->addresses()->save($studentAddress);

            $visaDetails = new Visa();
            $visaDetails->passport_number = $request->input("visaPassportNumber");
            $visaDetails->visa_number = $request->input("visaVisaNumber");
            $visaDetails->visa_class = $request->input("visaVisaClass");
            $visaDetails->visa_grant_date = $request->input("visaVisaGrantDate");
            $visaDetails->visa_expiry_date = $request->input("visaVisaExpiryDate");
            $studentDetail->visaDetails()->save($visaDetails);
//
            $instituteDetails = new Institute();
            $instituteDetails->institute_name = $request->input("instituteName");
            $instituteDetails->institute_location = $request->input("instituteLocation");
            $instituteDetails->institute_phone1 = $request->input("institutePhone1");
            $instituteDetails->institute_phone2 = $request->input("institutePhone2");
            $instituteDetails->institute_email = $request->input("instituteEmail");

//            dd($instituteDetails->courses);
            $courseDetails = new Course();
            $courseDetails->course_level = $request->input("courseLevel");
            $courseDetails->course_name = $request->input("courseName");
            $courseDetails->course_fee = $request->input("courseFee");
            $courseDetails->course_concession_fee = $request->input("courseConcessionFee");
            $courseDetails->course_duration = $request->input("courseDuration");
            $courseDetails->course_commencement_date = $request->input("courseCommencementDate");
            $studentDetail->instituteDetails()->save($instituteDetails);
            $instituteDetails->courses()->save($courseDetails);

Есть идеи по ускорению этого процесса ??

Вы можете проверить это и это, чтобы получить представление.

Madushan Perera 23.06.2018 00:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
1
439
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто настройте создание своих моделей с использованием массового назначения, поэтому:

Итак, в вашей модели СтудентПодробнее:

    class StudentDetail{

        protected $fillable = [
            'student_first_name',
            'student_last_name',
            'student_phone_number',
            'student_date_of_birth',
            'student_email',
        ];
        //...
        //... rest of your model
    }

Затем настройте свои входы HTML, чтобы в их имена был пользовательский массив, например, так:

<input type = "text" id = "foo" name = "student[student_first_name]">
<input type = "text" id = "foo" name = "student[student_last_name]">
.....

Кончик: для проверки, вы должны обрабатывать его с помощью точечной нотации, поэтому ваше правило может быть таким:

'student.student_first_name' => 'required|humanName|string|max:255',

Теперь просто сделайте следующее в своем контроллере:

$studentDetail = StudentDetail::create($request->input('student'));

Теперь вы сделали то же самое для своего адрес и других моделей.

GIST: После включения массового назначения для ваших моделей у вас может получиться ТОЛЬКО, следующая пара строк кода сделает все это за вас, и это будет намного веселее и полнее динамизма;) ИМХО!

$relatedModels = ['Address', 'Visa', 'Institute', 'Course'];
    foreach ($relatedModels as $relatedModel) {
        $relatedModelClass = 'App\\'.$relatedModel; //adjust the namespace of your models here.
        $ormRelatedModel = $relatedModelClass::create(strtolower($request->input($relatedModel)));
        $studentDetail->{strtolower(str_plural($relatedModel)) . 'Details'}()->save($ormRelatedModel);
    }

обратите внимание, что в этом случае имена ваших отношений должны быть немного изменены, как функция addresses в вашем классе / модели StudentDetail должна быть изменена на addressDetails или просто удалите .'Details' из моего примера кода выше и удалите его из других имен ваших отношений, то есть: изменить instituteDetails() в institute(). и сделайте имена отношений множественным числом, пожалуйста!

Я только что протестировал, и он работает, Ваше здоровье!

Спасибо, Мохаммад, за ответ. Я немного запутался при установке отношения один к одному с помощью этого метода. Метод create устанавливает значение непосредственно в базу данных. Я не мог прикрепить модели друг к другу.

Jivan Bhandari 23.06.2018 01:10

Добро пожаловать :), и на самом деле то, что я вам написал, - это комплексное решение. просто установите для ваших моделей / HTML входные данные в качестве примера. и поверьте, это выиграет у вас много времени;)

Mohamed Kawsara 23.06.2018 01:20

Чтобы помочь вам в отношении самого отношения, forexanple UserDetails + Address, у вас должен быть address_id на вкладке UserDetails, я думаю, это user_details, тогда в модели UserDetails, которую вы должны иметь, public function addresses(){ return $this->belongTo(Address::class);}, обратите внимание, что имя этой функции должно быть в единственном числе! Я нарушил условность здесь, чтобы он соответствовал динамизму, который я добавил выше;) Удачи, братан!

Mohamed Kawsara 23.06.2018 01:22

Другие вопросы по теме