美好的一天,
当我尝试为我的数据库播种时,我遇到了错误“类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
时收到错误。我怎样才能解决这个问题?谢谢!
答案 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;
来解决此问题。