За последние 24 часа нас посетили 20756 программистов и 1011 роботов. Сейчас ищут 375 программистов ...

Как отправить данные из одной формы отправить на три таблицу базы данных

Тема в разделе "Laravel", создана пользователем Ilgiz, 15 июн 2021.

  1. Ilgiz

    Ilgiz Новичок

    С нами с:
    15 июн 2021
    Сообщения:
    2
    Симпатии:
    0
    Есть форма для создания тестов с динамическими полями

    HTML:
    1. <form action="{{ route('testy.store') }}" method="POST" enctype="multipart/form-data">
    2.                             @csrf
    3.                             <div class="card-header shapka_testa">
    4.                                 <div class="form-group">
    5.                                     <label>Название теста</label>
    6.                                     <input type="text" name="title" class="form-control" placeholder="Введите название теста" required>
    7.                                     <label>Описание теста</label>
    8.                                     <textarea type="text" name="opisanye" class="form-control" placeholder="Введите описание теста" required></textarea>
    9.                              
    10.                                     <label>Время (максимум 180 мин.)</label>
    11.                                     <input type="number" pattern="\d+" name="time" min="1" max="180" value="30" name="title" class="form-control" required>                      
    12.                                 </div>
    13.                             </div>
    14.                             <div class="container-fluid card-body">
    15.                                 <div class="row batman-picture">
    16.                                     // динамическое поле
    17.                                         <a class="col-lg-6" id="fieldset">                                
    18.                                             <div class="card card-primary">
    19.                                                 <div class="card-header">
    20.                                                     <input type="file" class="upload" id="rebate_image" name="rebate_image[]" readonly="" required title="Нажмите чтобы загрузить картинку теста">
    21.                                                 </div>
    22.                                                 <div class="card-footer">
    23.                                                     <div class="col">
    24.                                                         <input type="radio" name="otvety[]" id="r1">
    25.                                                         <input type="text" name="varianty[]" value="A" class="form-control" readonly="">
    26.                                                     </div>
    27.                                                     <div class="col">
    28.                                                         <input type="radio" name="otvety[]" id="r2">
    29.                                                         <input type="text" name="varianty[]" value="Б" class="form-control" readonly="">
    30.                                                     </div>
    31.                                                     <div class="col">
    32.                                                         <input type="radio" name="otvety[]" id="r3">
    33.                                                         <input type="text" name="varianty[]" value="В" class="form-control" readonly="">
    34.                                                      </div>
    35.                                                     <div class="col">
    36.                                                         <input type="radio" name="otvety[]" id="r4">
    37.                                                         <input type="text" name="varianty[]" value="Г" class="form-control" readonly="">
    38.                                                     </div>
    39.                                                 </div>
    40.                                             </div>
    41.                                         </a>
    42.                                     // динамическое поле
    43.                                 </div>
    44.                                 <button type="button" name="add" id="btnAddressAdd" class="btn btn-success btn-lg btn-block nomer_testa"><i class="fas fa-plus"></i> Добавить вопрос</button>
    45.                             </div>
    46.                             <div class="card-footer shapka_testa d-grid gap-2 d-md-flex justify-content-md-end">
    47.                                 <button type="submit" class="btn btn-primary izmenit_name"><i class="fas fa-save"></i> Сохранить тест</button>
    48.                             </div>
    49.                         </form>
    Контроллер: class TestyController extends Controller
    PHP:
    1. public function store(Request $request)
    2.     {
    3.      
    4.         return redirect('admin_panel/testy')->withSuccess('Тест была успешно добавлена!');
    5.     }
    И три таблицы в базе данных:
    1) testies с полями title, opisanye и time
    2) test_voprosies c полями test_title_id и rebate_image
    3) test_otveties с полями rebate_img_id, varianty и otvety
    Каждый вопрос имеет 4 варианта.

    Как сохранить в базу данных, не могу написать TestyController и модел Testy. Использую ларавел 8
     
    #1 Ilgiz, 15 июн 2021
    Последнее редактирование: 15 июн 2021
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    voprosies, otveties. OHMYGOD! смешивать русский и английский в именах, это смех сквозь слёзы. особенно когда ты из Казахстана. ведь кто-то это будет читать!!! пожалей их.

    что-то не видно даже попыток что-то сохранить. друг, покажи свои попытки.

    глядя на поля в форме, я думаю что для сохранения ТАКИХ тестов достаточно одной таблицы, где каждая запись хранит текст вопроса и правильный ответ.
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Тема работы со связанными таблицами через Eloquent в документации разжёвана предельно.
    --- Добавлено ---
    А если бы на казахском были, было бы лучше?

    @Ilgiz По идентификаторам правило одно: единственный допустимый язык - английский, независимо от страны проживания.
     
  4. Ilgiz

    Ilgiz Новичок

    С нами с:
    15 июн 2021
    Сообщения:
    2
    Симпатии:
    0
    это модель
    Код (Text):
    1. <?php
    2.  
    3. namespace App\Models;
    4.  
    5. use Illuminate\Database\Eloquent\Factories\HasFactory;
    6. use Illuminate\Database\Eloquent\Model;
    7.  
    8. class Testy extends Model
    9. {
    10.     use HasFactory;
    11.  
    12.     public function test_voprosyTest_otvety()
    13.     {
    14.         return $this->hasOneThrough(Otvety::class, Voprosy::class);
    15.     }
    16.  
    17.     public function podcategory()
    18.     {
    19.         return $this->belongsTo('App\Models\Podcategory', 'podcat_id');
    20.     }
    21.     public function uroky()
    22.     {
    23.         return $this->belongsTo('App\Models\Uroky', 'urok_id');
    24.     }
    25.     public function user()
    26.     {
    27.         return $this->belongsTo('App\Models\User', 'user_id');
    28.     }
    29. }
    контроллер

    Код (Text):
    1. <?php
    2.  
    3. namespace App\Http\Controllers\Admin;
    4.  
    5. use App\Http\Controllers\Controller;
    6. use App\Models\Testy;
    7. use Illuminate\Http\Request;
    8. use App\Models\Podcategory; // добавлена для связи с подкатегориями
    9. use App\Models\Uroky; // добавлена для связи с уроками
    10. use App\Models\User; // добавлена для связи с подкатегориями
    11.  
    12. class TestyController extends Controller
    13. {
    14.  
    15. public function store(Request $request)
    16.     {
    17.             Testy::create([
    18.                 $testy->user_id = \Auth::user()->id,
    19.                 $testy->urok_id = $request->urok_id,
    20.                 $testy->podcat_id = $request->podcat_id,
    21.                 $testy->title = $request->test_title,
    22.                 $testy->opisanye = $request->text,
    23.                 $testy->rebate_imag = $request->img,
    24.                 $testy->time = $request->time,
    25.            ]);
    26.  
    27.            Voprosy::create([
    28.               $test_voprosy->test_title_id = $request->test_title_id,
    29.               $input = $request->all(),
    30.               $test_voprosy = ['img_test' = $input['rebate_new_image'][$i],],
    31.                
    32.            ]);
    33.  
    34.           Otvety::create([
    35.               $test_otvety->img_test_id = $request->img_test_id,
    36.               $input = $request->all(),
    37.               $test_otvety = ['varianty' = $input['varianty'][$i],],
    38.               $input = $request->all(),
    39.               $test_otvety = ['otvety' = $input['variant'][$i],],
    40.            ]);
    41.          
    42.         return redirect('admin_panel/testy')->withSuccess('Тест была успешно добавлена!');
    43.     }
    44. }
    не удается сохранить в базу данных.

    я навичок в этой сфере. только-только начинаю.
    в некоторых местах написал на русском, а в некоторых на английском пока что только так мне понятнее. Извиняюсь за неудобства
    --- Добавлено ---
    в будущем нужно будет сохранить и неправильные ответы
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Боооль. Где вы в документации такое вообще нашли?
    upload_2021-6-16_15-50-23.png
    --- Добавлено ---
    А обязательно только-только начинать прямо с Laravel?
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    нет ) но это не наезд на казахский язык, это совет использовать для всех переменных и сущностей в БД только английский.
    --- Добавлено ---
    ну ты то знаешь, просто повторим ещё раз для ТСа
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Вообще для всех. А то к нам, к примеру, молодёжь приходит, и не знает, как keyboard или exception правильно написать.