Проблема с заполнением пользователей и их профилей в Laravel - PullRequest
1 голос
/ 04 февраля 2020

У меня есть пользователь и пользователь профиля. В настоящее время, когда я заполняю свою базу данных, я получаю сто пятьдесят пользователей в таблице пользователей и только четыре пользователя с их профилями, заполненными таблицей user_profiles. Теперь я знаю, что проблема в функции getUsers () в UserProfileSeeder. php, которая возвращает результат json_decode всего с четырьмя пользователями. Мне нужна помощь о том, как написать 'для' l oop для этого четвертого пользователя (normaluser3), чтобы я получил правильное количество результатов (150) в моей таблице user_profiles? Любая помощь приветствуется. Вот мой код.

UserSeeeder. php

<?php

use App\User;
use App\Gender;
use Carbon\Carbon;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;

class UserSeeder extends Seeder
{
    /**
    * Run the database seeds.
    *
    * @return void
    */
    public function run()
    {
        $genders = DB::table('genders')->insert([
            [
                'genders' => 'Woman',
            ],
            [
                'genders' => 'Woman Looking For Woman',
            ],
            [
                'genders' => 'Man',
            ]
        ]);

        $genderIds = Gender::pluck('id');

        DB::table('users')->insert([
            'gender_id' => $genderIds->random(),
            'name' => 'authuser',
            'email' => 'authuser@auth.com',
            'email_verified_at' => now(),
            'password' => Hash::make('auth123456'),
            'age' => 18,
            'premium' => rand(0, 1),
            'remember_token' => Str::random(10), 
            'created_at' => Carbon::now(),
            'updated_at' => Carbon::now(),
        ]); 

        DB::table('users')->insert([
            'gender_id' => $genderIds->random(),
            'name' => 'normaluser',
            'email' => 'normaluser@normal.com',
            'email_verified_at' => now(),
            'password' => Hash::make('normal123456'),
            'age' => 18,
            'premium' => rand(0, 1),
            'remember_token' => Str::random(10), 
            'created_at' => Carbon::now(),
            'updated_at' => Carbon::now(),
        ]);

        DB::table('users')->insert([
            'gender_id' => $genderIds->random(),
            'name' => 'normaluser2',
            'email' => 'normaluser2@normal2.com',
            'email_verified_at' => now(),
            'password' => Hash::make('normal2123456'),
            'age' => 18,
            'premium' => rand(0, 1),
            'remember_token' => Str::random(10), 
            'created_at' => Carbon::now(),
            'updated_at' => Carbon::now(),
        ]);

        $faker = Faker\Factory::create();
        for ($i = 0, $n = 150; $i < $n; $i++) {
            DB::table('users')->insert([
                [
                    'gender_id' => $genderIds->random(),
                    'name' => 'normaluser3',
                    'email' => $faker->unique()->safeEmail,
                    'email_verified_at' => now(),
                    'password' => Str::random(12),
                    'age' => 18,
                    'premium' => rand(0, 1),
                    'remember_token' => Str::random(10), 
                    'created_at' => Carbon::now(),
                    'updated_at' => Carbon::now(),
                ]
            ]);
        }
    }
}

UserProfileSeeder. php

<?php

use App\User;
use Carbon\Carbon;
use Faker\Provider\Address;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class UserProfileSeeder extends Seeder
{
    /**
    * Run the database seeds.
    *
    * @return void
    */
    public function run()
    {
        $faker = Faker\Factory::create();
        foreach ($this->getUsers() as $userObject) {
            $user = User::all()->random()->id;
            $profile = DB::table('user_profiles')->insertGetId([
                'user_id' => $user,
                'status' => $faker->numberBetween($min = 1, $max = 2),
                'first_name' => $faker->firstName(),
                'last_name' => $faker->lastName(),
                'job' => $faker->company,
                'distance' => $faker->numberBetween($min = 1, $max = 1000),
                'city' => $faker->city,
                'interested_in' => $faker->numberBetween($min = 1, $max = 2),
                'age_from_preference' => $faker->numberBetween($min = 18, $max = 35),
                'age_to_preference' => $faker->numberBetween($min = 36, $max = 66),
                'looking_for' => $faker->numberBetween($min = 1, $max = 5),
                'personal_quote' => $faker->text(),
                'bio_about' => $faker->text(),
                'postal_code' => Address::postcode(),
                'country' => $faker->country,
                'height' => $faker->numberBetween($min = 140, $max = 220),
                'orientation' => $faker->numberBetween($min = 1, $max = 3),
                'sexual_preferences' => $faker->numberBetween($min = 1, $max = 4),
                'body_type' => $faker->numberBetween($min = 1, $max = 4),
                'relationship_status' => $faker->numberBetween($min = 1, $max = 5),
                'children' => $faker->numberBetween($min = 1, $max = 5),
                'smoke' => $faker->numberBetween($min = 1, $max = 3),
                'education' => $faker->numberBetween($min = 1, $max = 4),
                'astro' => $faker->numberBetween($min = 1, $max = 12),
                'hobbies' => $faker->sentence(),
                'workplace' => $faker->jobTitle,
                'sports' => $faker->numberBetween($min = 1, $max = 12),
                'movies_series' => $faker->numberBetween($min = 1, $max = 12),
                'music' => $faker->numberBetween($min = 1, $max = 12),
                'food' => $faker->numberBetween($min = 1, $max = 12),
                'literature' => $faker->numberBetween($min = 1, $max = 12),
                'mobile_number' => $faker->phoneNumber,
                'updated_at' =>  Carbon::now(),
            ]);
        }
    }

    public function getUsers()
    {
        $jsonData = '[
        {
            "name":"authuser"
        },
        {
            "name":"normaluser"
        },
        {
            "name":"normaluser2"
        },
        {
            "name":"normaluser3" // here is that user that is supposed to be in for loop!!!!!!!!!!!!!
        }
    ]';
        return json_decode($jsonData);
    }
}

1 Ответ

1 голос
/ 04 февраля 2020

Замените getUsers() на User:all(), чтобы выполнить итерацию для каждого пользователя в базе данных:

foreach (User::all() as $user) {
    DB::table('user_profiles')->insert([
        'user_id' => $user->id,
        // the rest of your attributes
    ]);

    // if you have a relationship for the profile on your user model
    // this way you can omit the user_id, created_at and updated_at attributes
    $user->profile()->create([
        // the rest of your attributes
    ]);
}
...