Как вставить второй запрос foreach в запрос foreach? - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь вставить случайные данные с php в базу данных ipromapp, которую я создал (mysql) с помощью Faker - которую я импортировал с помощью composer (она работает нормально).

Я установил соединение - оно работает.

$connection = mysqli_connect('localhost','root','root', 'ipromapp');

создан класс Bank и метод randomize () - внутри у меня есть этот код, который работает не совсем корректно.Он создает 5 пользователей (поэтому первый запрос работает правильно) - второй запрос, который я сделал внутри другого foreach (мне нужно случайное количество транзакций, поэтому я не могу использовать диапазон от первого foreach - от 1 до 5).

Я правильно проиндексировал и создал связь с user_id из таблицы transaction до id (первичный ключ) таблицы user (сс: http://prntscr.com/mdxfs1)

Я пытался отредактировать запрос, изменить диапазон второго foreach - у меня есть несколько незначительных моментов "лампочек", но мне трудно преобразовать их в код.

    function randomize()
    {
        // accessing variables outside the function
        global $faker, $connection;
        $insertNum = 0;
        // deleting users so that we have only 5 we want
        $connection->query("TRUNCATE TABLE `users`");
        $connection->query("TRUNCATE TABLE `transactions`");


        // adding 5 people into the users db
        foreach (range(1,5) as $x){
            $body = $faker->firstName($gender = null) . ' ' . $faker->lastName;
            $connection->query("
                INSERT INTO users (name, birth_date)
                VALUES ('{$body}', '{$faker->date($format = 'Y-m-d', $max = '-10 years')}')
            ");
            printf ("New Record has id %d.\n", $connection->insert_id);

            // random number of transactions

            $randomNum = rand(20,40);
            $insertNum += $randomNum;
            printf ( "Random number is %d.<br>", $randomNum);
            // adding random number of transactions from past 6 months
            foreach (range(1, $insertNum) as $y) {
                $connection->query("
INSERT INTO transactions (user_id, date, deposit, withdraw)
VALUES ('{$connection->insert_id}','{$faker->date( $format = 'Y-m-d', $max  = 'now')}', '{$faker->randomDigit}', '{$faker->randomDigit}')
                    ");
            }
        }
    }

Я ожидал, что запрос сгенерирует от 20-40 транзакций на пользователя.Я думаю что-то связано с идентификаторамиЗапрос генерирует только 1 - значит, что-то работает, но я предполагаю, что запрос или логика неверны - если кто-то может указать мне на проблему, если он увидел что-то конкретное?

SS из вывода phpMyAdmin после запускаphp file: // вывод в браузер (я использую MAMP и только что запустил localhost) http://prntscr.com/mdxe4l

// 5 сгенерированных пользователей http://prntscr.com/mdxee9

// По какой-то причинепри первом запуске скрипта он генерирует 2 для первого идентификатора http://prntscr.com/mdxgc3

1 Ответ

0 голосов
/ 29 января 2019

Во втором цикле foreach вы используете $connection->insert_id для получения идентификатора пользователя, но происходит то, что после первого цикла он выбирает идентификатор только что вставленной транзакции и, вероятно, выдает ошибки, которыене отображаются.

Что вы можете сделать, это присвоить идентификатор пользователя переменной перед циклом:

$userId = $connection->insert_id;
foreach (range(1, $insertNum) as $y) {
    $connection->query("
INSERT INTO transactions (user_id, date, deposit, withdraw)
VALUES ('{$userId}','{$faker->date( $format = 'Y-m-d', $max  = 'now')}', '{$faker->randomDigit}', '{$faker->randomDigit}')
        ");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...