Попытка заполнить базу данных Neo4j

Я пытаюсь заполнить базу данных 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}}

Я не могу понять, как решить это вообще …

0

Решение

Я думаю вместо:

$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();

найти последнюю запись в этом массиве

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]