Проблема с заполнением столбца базы данных с заполнением в Laravel - PullRequest
1 голос
/ 29 апреля 2020

Мне нужно заполнить столбец базы данных от заполнения. У меня есть столбец «заинтересованных_ин» в таблице user_profiles, и мне нужно заполнить его с соответствующим идентификатором из столбца «значение_идентификатора» из таблицы user_interests. И user_profiles, и таблица user_interests связаны с таблицей пользователей (столбец 'user_id' находится в обеих таблицах). Поэтому, если значение столбца «value_id», например, равно 1, оно должно быть равно 1 в столбце «заинтересованных_ин», мне нужна помощь в том, как заполнить этот столбец «заинтересованных_ин» из сеялок. Столбец 'value_id' уже заполнен. Вот мои таблицы и примеры данных и мой код, но пока он не работает, он показывает ошибку «Преобразование массива в строку».

user_interests table

user_id    field_id    value_id
   1           1           1

user_profiles table

id    user_id    interested_in
 1       1           and here needs to be 1, to associate value_id (1) from user_interests table

UserProfileTableSeeder. php

class UserProfileTableSeeder extends Seeder
{
    use ChunkSeeder;

    public function run()
    {
        $users = User::all()->pluck('id');

        $user_interests = DB::table('user_interests')->select('value_id')->where('field_id', 1)->get();
        $user_interests_values = $user_interests->pluck('value_id')->toArray(); 

        $seed = [];

        foreach ($users as $userId) {
            $seed[] = factory(UserProfile::class)->make(
                [
                    'user_id' => $userId,
                    'interested_in' =>  $user_interests_values, // Shows array to string error!!!
                ]
            )->toArray();
        }

        $this->seedChunks($seed, [UserProfile::class, 'insert']);
    }
}

1 Ответ

1 голос
/ 29 апреля 2020

Вот почему $user_interests_values - это массив, который вы видите в этой строке (в конце):

$user_interests_values = $user_interests->pluck('value_id')->toArray();

Попробуйте на заводе изменить $user_interests_values на current($user_interests_values) или, возможно, $user_interests_values['id'] или что-то еще.

PS: Я не совсем уверен, что внутри $user_interests_values, вы можете увидеть это с dd() и запустить миграцию (не волнуйтесь, миграция не будет успешной из-за dd(), и вы сможете запустить его позже, пока он не завершится должным образом.

Кстати, я рекомендую вам сделать что-то более разборчивое, чем вы делали в своем методе rum(). I значит, что-то вроде этого:

$interest = factory(UserInterests::class)->create();

factory(UserProfiles::class, 20)->create([
    'interest' => $interest->id,
]);
...