Я пытаюсь заполнить базу данных neo4j (впервые) через класс Seeder Faker, NeoEloquent и Eloquent. Это делает розничный торговец, 2 компании, некоторые продукты и связывается тогда вместе.
Retailer -> Many-Many -> Product
Retailer -> One-Many -> Company
Company -> One-Many -> Product
public function run()
{
Eloquent::unguard();
$faker = Faker\Factory::create();
// Retailer
Retailer::createWith([
[
'name' => $faker->company
],
[
'companies' =>
[
[
'company_id' => $faker->randomNumber(8),
'name' => $faker->company, 'active' => 1
],
[
'company_id' => $faker->randomNumber(8),
'name' => $faker->company, 'active' => 1
]
]
]
]);
// Products
for ($i = 1; $i < 3; $i++)
{
for ($j = 1; $j < $faker->numberBetween(1,3); $j++)
{
$product = Product::create([
'product_id' => $faker->randomNumber(8),
'name' => $faker->name,
'active' => '1',
'time_added' => $faker->date,
'price' => $faker->numberBetween(1,999),
]);
$retailer = Retailer::find(1);
$retailer->products()->save($product); // error here
$company = Company::find($i);
$company->products()->save($product);
}
}
}
{"error":
{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException",
"message":"Call to undefined method Illuminate\\Database\\Eloquent\\Collection::products()",
"file":"D:\\Swaggable\\Laravel\\app\\database\\seeds\\DatabaseSeeder.php",
"line":62}}
Я не могу понять, как решить это вообще …
Я думаю вместо:
$retailer->products()->save($product);
вы должны использовать:
$retailer->products->save($product);
И после:
$retailer = Retailer::find(1);
Вы должны добавить дополнительную проверку, если розничный продавец не является нулевым, например:
if (is_null($retailer)) {
die('retailer not found')
}
и в случае, если вы не знаете, какой идентификатор у Retailer, вы должны использовать:
$retailer = Retailer::orderby('id', 'desc')->first();
найти последнюю запись в этом массиве
Других решений пока нет …