У меня есть эта функция сеялки. Требуется все вставленные пользователи, а затем для каждого из них генерируется случайное число (от 0 до 12) изображения профиля.
public function run()
{
foreach (App\User::all() as $user) {
echo "Generating profile pic for $user->name ($user->id)... ";
$profile_pics = factory(App\Image::class, rand(0, 12))->create();
echo count($profile_pics) . " generated. ";
echo " Saving... ";
foreach ($profile_pics as $pp) {
$user->profile_pics()->save(App\Image::find($pp->id));
}
echo "Saved\n";
}
}
Когда я запускаю его, некоторые первые изображения профиля случайного пользователя вставляются правильно. Но после этого не получается.
Generating profile pic for Amara Abbott I (1)... 5 generated. Saving... Saved
Generating profile pic for Major Crist (2)... 12 generated. Saving... Saved
Generating profile pic for Imelda Hettinger IV (3)... 3 generated. Saving... Saved
Generating profile pic for Tyrique Von (4)... 5 generated. Saving... Saved
Generating profile pic for Keshawn Mills IV (5)... 1 generated. Saving...
[ErrorException]
Trying to get property of non-object
Посмотрите в моей базе данных, последнее добавленное изображение профиля для 65-го пользователя, а не для 5-го.
Я напечатал идентификатор текущей фотографии профиля обработки, и, очевидно, когда число фотографий профиля равно 1, тогда это терпит неудачу.
Generating profile pic for Gerald Kohler (10)... 3 generated. Saving... 56 57 58 Saved
Generating profile pic for Dr. Reagan Donnelly IV (11)... 10 generated. Saving... 59 60 61 62 63 64 65 66 67 68 Saved
Generating profile pic for Edwardo Leffler (12)... 2 generated. Saving... 69 70 Saved
Generating profile pic for Jaylen Harris (13)... 11 generated. Saving... 71 72 73 74 75 76 77 78 79 80 81 Saved
Generating profile pic for Clark Franecki (14)... 5 generated. Saving... 82 83 84 85 86 Saved
Generating profile pic for Leatha Schiller I (15)... 6 generated. Saving... 87 88 89 90 91 92 Saved
Generating profile pic for Natasha Stiedemann (16)... 2 generated. Saving... 93 94 Saved
Generating profile pic for Royce Kshlerin (17)... 11 generated. Saving... 95 96 97 98 99 100 101 102 103 104 105 Saved
Generating profile pic for Dedric Lang (18)... 8 generated. Saving... 106 107 108 109 110 111 112 113 Saved
Generating profile pic for Jayden Haag (19)... 2 generated. Saving... 114 115 Saved
Generating profile pic for Maeve Haley (20)... 4 generated. Saving... 116 117 118 119 Saved
Generating profile pic for Ana Zboncak (21)... 12 generated. Saving... 120 121 122 123 124 125 126 127 128 129 130 131 Saved
Generating profile pic for Winnifred Ruecker (22)... 7 generated. Saving... 132 133 134 135 136 137 138 Saved
Generating profile pic for Guy Fisher Jr. (23)... 9 generated. Saving... 139 140 141 142 143 144 145 146 147 Saved
Generating profile pic for Adelle Upton (24)... 9 generated. Saving... 148 149 150 151 152 153 154 155 156 Saved
Generating profile pic for Armando Schamberger MD (25)... 1 generated. Saving...
[ErrorException]
Trying to get property of non-object
Как так ?
Каков результат этого, когда создается только один элемент?
factory(App\Image::class, rand(0, 12))->create();
Ах, я просто нашел решение сам .. Проблема была в моем ModelFactory.php
Я уже просматриваю всех зарегистрированных пользователей. Я сделал это еще раз в моем файле Seed. Вот почему это не удалось.
// ModelFactory.php
$factory->define(App\User::class, function (Faker\Generator $faker) {
return [
'user_id' => App\User::all()->random()->id,
'base_url' => $faker->imageUrl(350, 350)
];
});
Было бы здорово иметь возможность передавать параметры на фабрики но, к сожалению, мы не можем. Таким образом, я смогу генерировать случайное количество профилей для пользователей. Но здесь, тьфу.
Других решений пока нет …