Как вставить несколько строк таблицы с несколькими значениями? (Laravel) - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть таблица с несколькими строками ввода, как эта:

             <tr>
                <td>
                    <input class = "shelf" name="shelf[]" type="text" required>
                </td>
                <td>
                    <select class="book" name="book[][]" multiple="multiple" required>
                    <option>...</option>
                    </select>
                </td>
            </tr>

Пользователь вводит названия полок и выбирает несколько книг для каждой полки. Полки вставляются в одну таблицу, а их идентификаторы и идентификаторы выбранных книг вставляются в другую таблицу. По сути, так:

foreach ($request->shelf as $item =>$v){
    $id = Shelf::insertGetId(
        ['name' => $request->shelf[$item]]
    );

    foreach ($request->shelf[$item] as $it =>$v) {
        $data2 = array(
            'fk_Shelf' => $id,
            'fk_Book' => $request->book[$item][$it],
        );
        Shelf_Book::insert($data2);
    }
}

Мой второй foreach не работает, потому что он всегда вставляет только одну из выбранных книг. Как мне решить это?

1 Ответ

0 голосов
/ 20 апреля 2020

Похоже, что на втором для l oop вы пытаетесь повторить снова по полке, но у него есть только одно измерение, может быть, вы хотели перебрать по книге [$ item]?

foreach ($request->shelf as $shelf_key => $shelf_value){
    $id = Shelf::insertGetId(
        ['name' => $shelf_value]
    );

    foreach ($request->book[$shelf_key] as $book_key => $book_value) {
        $data2 = array(
            'fk_Shelf' => $id,
            'fk_Book' => $book_value,
        );
        Shelf_Book::insert($data2);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...