【问题标题】:Trying to seed Neo4j database尝试播种 Neo4j 数据库
【发布时间】:2014-09-16 07:03:03
【问题描述】:

我正在尝试通过 Faker、NeoEloquent 和 Eloquent 的 Seeder 类播种 neo4j 数据库(第一次)。它生产一家零售商、两家公司、一些产品,然后将它们联系在一起。

关系

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}}

我完全不知道如何解决它......

【问题讨论】:

    标签: php laravel neo4j


    【解决方案1】:

    我认为不是:

    $retailer->products()->save($product);
    

    你应该使用:

    $retailer->products->save($product);
    

    之后:

    $retailer = Retailer::find(1);
    

    如果零售商不为空,您应该添加额外的检查,例如:

    if (is_null($retailer)) {
      die('retailer not found') 
    }
    

    如果您不知道应使用的零售商 ID 是什么:

    $retailer = Retailer::orderby('id', 'desc')->first();
    

    查找此数组中的最后一条记录

    【讨论】:

    • 有没有可能在创建第一个retail时,它的id可能不是1?
    • @UmairAhmed 如果 id 设置为自动增量,则取决于您的表包含的下一个自动增量值。如果您之前在此表中有任何值并将其删除,则 id 将不是 1
    • 上面生成'试图获取非对象的属性'。
    • 将行替换为 $retailer = Retailer::all()->first() 后解决了问题。感谢您的宝贵时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 2011-08-29
    相关资源
    最近更新 更多