2017-02-15 3 views
0

поэтому у меня есть 2 стола в моем db: пример студентов и хобби. , так что это означает 2 контроллера, а также StudentController и HobbyController. а также 2 модели.одна форма для 2 контроллеров в laravel

У меня есть форма, где она принимает, например:

  • имя 1.student

  • 2.age

  • 3.height

  • 4.weight

  • 5.bmi

  • 6.hobby

  • 7.schedule

  • 8.intensity

  • 9.diet

первые пять приходится идти на studentcontroller и 6- 9 идет к hobbycontroller .. как shud я делаю это? я не хочу 2 разных формы ...

+0

Вы можете использовать перенаправление на метод [action] (https://laravel.com/docs/5.4/responses#redirecting-controller-actions) или вы можете извлечь эту логику для службы – jarguez01

+0

thx для предложения..going с выпиской на службу – Mikethetechy

ответ

0

Это может быть не лучший ответ, но вы можете использовать одну форму для перехода к контроллеру, а затем передать данные в несколько хранилищ.

route.php

Route::resource('student', 'StudentController'); 

StudentController.php

public function __constructor(StudentRepository $student, HobbyRepository $hobby) 
{ 
    $this->student = $student; 
    $this->hobby= $hobby; 
} 

public function store(Request $request) 
{ 
    $data = $request->all(); 
    $hobby = [ 
     'hobby' => $data['hobby'], 
     'schedule' => $data['schedule'], 
     'intensity' => $data['intensity'], 
     'diet' => $data['diet'], 
    ]; 
    $student = [ 
     'student_name' => $data['student_name'], 
     'age' => $data['age'], 
     'height' => $data['height'], 
     'weight' => $data['weight'], 
     'bmi' => $data['bmi'], 
    ]; 

    $this->student->store($student); 
    $this->hobby->store($hobby); 

    //your other codes. 
} 

StudentRepository.php

public function store($data) 
{ 
    // your implementation on storing the user. 
} 

HobbyRepository.php

public function store($data) 
{ 
    // your implementation on storing the hobby. 
} 

Вы можете использовать любой метод и переменные для передачи данных от контроллера. Надеюсь это поможет.

Edit:

Для вашего расширенного вопроса о хранении и извлечении информации.

Как указано в документации:

The create method returns the saved model instance: 

$flight = App\Flight::create(['name' => 'Flight 10']); 

Для получения дополнительной информации обратитесь к документации:

https://laravel.com/docs/5.3/eloquent#inserts

Если вы хотите передать student id в hobby простейшем метод заключается в том, чтобы вернуть ученика от StudentRepository и передать его на HobbyRepository.

например:

StudentRepository.php

public function store($data) 
{ 
    // your implementation on storing the user. 
    $student = [] // array of the student informations to be stored. 
    return Student::create($student); //you will have student information here. 
} 

StudentController.php

$student = $this->student->store($student); //store the student information and get the student instance. 
$this->hobby->store($hobby, $student->id); //pass it to the hobby to store id. 

Вы должны изменить hobbyRepository магазин, чтобы использовать student id.

Это может устранить вашу расширенную проблему.

+0

thxxx за усилия! этот метод захватывает! который я узнал из своего предыдущего вопроса, на который вы ответили ... им нужно попробовать ... прежде чем у меня есть проблема в моей форме ... для типа данных enum .. У меня есть столбцы таблицы, которые являются перечисляемыми типами. поэтому, когда я отправляю форму, это дает мне данные, усеченные ошибки .. любая идея? – Mikethetechy

+0

@paladin ... фиксированный тип данных enum..не беспокоит bro: D – Mikethetechy

+0

Okey great. ;) Надеюсь, вы скоро найдете лучший путь: D – PaladiN

Смежные вопросы