Laravel 4调用未定义的方法create()

时间:2013-11-18 04:32:16

标签: php laravel

我正在尝试将数据库种子添加到我的新数据库表中。

ProductSeeder.php

class ProductSeeder extends DatabaseSeeder {

public function run()
{
    $products = array(
        array(
            'name' => 'DSLR D300S (body only)',
            'image' => 'D300S_16_85_front34l_i.jpg',
            'stock' => 'Available',
            'price'=>'5188.00'
            )
        );


    foreach ($products as $product) {
        Product::create($product);
    }
}
}

模型/ Product.php

class Product extends Eloquent{
}

然而,当我运行db:seed时,它会说“调用未定义的方法Product :: create()”。

我该怎么解决?谢谢。

4 个答案:

答案 0 :(得分:3)

当依靠模型播种数据库并不是一个特别好的主意时,当您尝试通过存储库对模型进行单元测试(数据库测试)时,这就成了最重要的。

而是使用原始查询构建器(使用流畅的界面)。

DB::table('products')->insert(array(...));

答案 1 :(得分:0)

在Laravel中播种的最佳做法是使用'DB :: table()':

class ProductSeeder extends DatabaseSeeder {

    public function run()
    {

        $products = array(
                            array(
                                'name' => 'DSLR D300S (body only)',
                                'image' => 'D300S_16_85_front34l_i.jpg',
                                'stock' => 'Available',
                                'price'=>'5188.00'
                                )
                        );

        foreach ($products as $product) {
            DB::table('products')->insert($products);
        }

    }

}

答案 2 :(得分:0)

不能说它是你的问题,但由于我的播种机文件中的拼写错误而导致此错误

而不是

Product::create($product);

我有

// note only one semicolon
Product:create($product);

这无论如何肯定会导致同样的错误!

PHP Fatal error:  Call to undefined function create() 

所以我肯定会建议你再次检查你的代码

此外,我只是扩展了Seeder而不是DatabaseSeeder 所以也试试

class ProductSeeder extends Seeder {

答案 3 :(得分:-1)

Class Product需要有一个方法Create。

class Product extends Eloquent{

    public function create($product)
    {
        // Do something
    }

}