Как вставить несколько строк в таблицу одновременно? - PullRequest
1 голос
/ 29 марта 2020

Мне нужно отправить, например, 5 записей в одном запросе в одну таблицу (id_book - каждый раз отличается), поэтому мне нужно одним нажатием на кнопку создать, например, 10 записей. Этот код показывает это сообщение об ошибке: SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец 'id_book.0' в 'предложении where' (SQL: выберите количество () как совокупность из connect_user_books где id_book. 0 = 6 * (МОЙ ТЕКСТ: 6 - ИДЕНТИФИКАТОР МОЕГО СПИСКА, КОТОРЫЙ Я ДОЛЖЕН ДОБАВИТЬ В ДАННЫЕ ЗАПИСИ) )

Мой контроллер:

public function create()
{
    $books = Book::all();

    return view('connectUserBook.create', compact('books'));
}

public function store(Request $request)
{
    $this->validate($request, [
        'id_user_select' => 'required',
        'id_book' => 'required|array',
        'id_book.*' => 'exists:connect_user_books',
    ]);

    $userId = $request->input('id_user_select');

    // Vytvoření
    foreach ($request->input('id_book') as $book) {
        $connect = new ConnectUserBook;
        $connect->id_user_select = $userId;
        $connect->id_book = $book;
        $connect->save();
    }

    return redirect('/dashboard')->with('success', 'Výběr editován!');
}

Моя HTML разметка:

{{ Form::open(['action' => 'ConnectUserBookController@store', 'method' => 'POST']) }}

    <div>
        <label class="form-label">Vybraný výběr *</label>
        <div>
            <select name="id_user_select" class="form-control">

                <?php
                    $select_id = $_GET["id"];
                    $select_id;
                    $res = mysqli_query($link, "select * from selected_books Where id = $select_id");

                    while($row = mysqli_fetch_array($res))
                    {
                ?>
                <option value="<?php echo $row["id"]; ?>"> <?php echo $row["title"]; ?></option>                     
                <?php
                    }
                ?>
            </select>
        </div>
    </div>
    <br>

    @for ($i = 0; $i < 11; $i++)
        <div>
            <label class="form-label">Book {{ $i }} *</label>
            <div>
                <select name="id_book[]" class="form-control">

                    @foreach ($books as $book)
                        <option value="{{ $book->id_book }}">{{ $book->nazev }} - {{ $book->pocet_stranek }} stran</option>
                    @endforeach

                </select>
            </div>
        </div>
    @endfor

{{Form::submit('Submit', ['class' => 'btn btn-primary'])}}

{{ Form::close() }}

Ответы [ 2 ]

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

Попробуйте это

$data = array();
foreach ($request->input('id_book') as $book) {
         $data['id_user_select'] = $userId;
         $data['id_book'] = $book;
    }

ConnectUserBook::create($data); 

В вашей модели ConnectUserBook // добавьте заполняемое свойство, например

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class ConnectUserBook  extends Model
{
     protected $table = 'connectUserBooks'; //table name

     public $fillable = ['id_user_select' , 'id_book'];
}

Измените код контроллера как

$this->validate($request, [
    'id_user_select' => 'required',
    'id_book.*' => 'required|array',
    'id_book.*' => 'exists:connect_user_books,id',
]);
0 голосов
/ 29 марта 2020

Создайте массив и используйте метод вставки с eloquent.

$data = array()
foreach ($request->input('id_book') as $book) {
        $data[] = array('id_user_select'=>$userId,'id_book'=>$book);

    }

ConnectUserBook::insert($data); 

В соответствии с вашей ошибкой вам нужно указать в столбце. добавить столбец для сравнения с тем, какой столбец существует?

'id_book.*' => 'exists:connect_user_books,column_name',

Примечание: - Не вставляются метки времени.

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