如何在laravel 4.1上播种时间戳?

时间:2014-03-30 00:24:18

标签: laravel laravel-4

美好的一天,

当我尝试为我的数据库播种时,我遇到了错误“类DateTime的对象无法转换为字符串”。

这是我的迁移代码:

    public function up()
{
    Schema::create('tblinventory', function(Blueprint $table) {
        $table->increments('id');
        $table->integer('itemId');
        $table->enum('status', array('active','inactive'))->default(null)->nullable();
        $table->float('purchasePrice');
        $table->float('sellingPrice');
        $table->date('expirationDate');
        $table->float('ReceivedQuantity');
        $table->float('soldQuantity');
        $table->timestamps();
    });
}

和我的播种机:

<?php

class InventoryTableSeeder extends Seeder {

public function run()
{
    // Uncomment the below to wipe the table clean before populating
    DB::table('tblinventory')->truncate();

    $insert = [
        [
        'itemId' => '1', 
        'status' => 'inactive',
        'ReceivedQuantity'=>'100',
        'SoldQuantity'=>'93',
        'sellingPrice'=>'4.5',
        'purchasePrice'=>'3.5',
        'created_at' => new DateTime,
        'expirationDate'=>date('2015-02-22')
        ],
        [
        'itemId' => '1', 
        'status' => 'inactive',
        'ReceivedQuantity'=>'300',
        'SoldQuantity'=>'300',
        'sellingPrice'=>'4.75',
        'purchasePrice'=>'3.65',
        'expirationDate'=>date('2015-02-22')
        ],
        [
        'itemId' => '2', 
        'status' => 'inactive',
        'ReceivedQuantity'=>'100',
        'SoldQuantity'=>'93',
        'sellingPrice'=>'3.5',
        'purchasePrice'=>'2.5',
        'expirationDate'=>date('2014-07-22')
        ],
        [
        'itemId' => '3', 
        'status' => 'inactive',
        'ReceivedQuantity'=>'100',
        'SoldQuantity'=>'93',
        'sellingPrice'=>'12.5',
        'purchasePrice'=>'10.5',
        'expirationDate'=>date('2017-01-02')
        ],
        [
        'itemId' => '3', 
        'status' => 'inactive',
        'ReceivedQuantity'=>'100',
        'SoldQuantity'=>'100',
        'sellingPrice'=>'14.5',
        'purchasePrice'=>'13.5',
        'expirationDate'=>date('2017-07-22')
        ],
        [
        'itemId' => '4', 
        'status' => 'inactive',
        'ReceivedQuantity'=>'100',
        'SoldQuantity'=>'93',
        'sellingPrice'=>'24.5',
        'purchasePrice'=>'23.5',
        'expirationDate'=>date('2015-07-22')
        ]

    ];

    DB::table('tblinventory')->insert($insert);
    // Uncomment the below to run the seeder
    // DB::table('inventories')->insert($inventories);
}

}

我放'created_at'=> new DateTime时收到错误。我怎样才能解决这个问题?谢谢!

3 个答案:

答案 0 :(得分:18)

尝试使用Carbon创建日期(Laravel在内部使用它):

'expirationDate' => \Carbon\Carbon::createFromDate(2014,07,22)->toDateTimeString()

'created_at' => \Carbon\Carbon::now()->toDateTimeString()

答案 1 :(得分:7)

如果您想将种子随机化为模拟数据,我建议您使用PHP Faker。否则你可以使用

date('Y-m-d H:i:s');

使用Faker

https://github.com/fzaninotto/Faker

添加到composer.json

"fzaninotto/faker" : "dev-master",

包含命名空间

use Faker\Factory as Faker;

初始化Faker

$faker = Faker::create();

开始伪造东西

$faker->dateTime();

答案 2 :(得分:0)

我在这里参加派对有点晚了,但我想提供另一个选项,其他人可能会觉得有用。

如果您已经使用Eloquent创建了模型,那么还有另一个选项可让Eloquent使用orm自动为您填充这些字段。假设您的btlinventory有一个模型名称Inventory:

    foreach($insert as $row ){
        $inventory = new Inventory;
        $inventory->fill($row);
        $inventory->save();
    }

insert是一个查询构建器方法,因此它本身不会处理任何Eloquent任务,但是,您始终可以将查询构建器方法链接到Eloquent对象,然后它就可以工作。如果您使用Inventory::create($array);但仍有问题,那么我听说可以通过明确说明模型中的公开$timestamps = true;来解决此问题。