我正在尝试将CakePHP3中的实体保存在Cake Shell中。
这是我正在使用的代码,添加了一些调试:
$this->out("PRODUCT: " . var_dump($product) );
$newProduct = $this->VendorProducts->newEntity($product);
$this->out("NEWPRODUCT: " . var_dump($newProduct) );
if($this->VendorProducts->save($newProduct)) {
$this->out("SAVED");
} else {
$this->out("ERROR: " . print_r($newProduct->errors(), TRUE));
}
,这为Product提供了以下输出:
// Product:
array(5) {
["vendor_id"]=> int(1)
["vendor_sku"]=> string(15) "NW-ME-WL-MW150R"
["vendor_description"]=> string(38) "MERCUSYS 150Mbps WL-N BROADBAND ROUTER"
["vendor_price"]=> string(5) "11.00"
["date_fetched"]=> string(19) "2015-09-24 18:32:14"
}
在这里你可以看到有一个" date_fetched"属性,但在传递给newEntity()之后,该值变为null。下面是调用newEntity()函数后$ newProduct的输出。
// New Product:
object(App\Model\Entity\VendorProduct)#57 (12) {
["vendor_id"]=> int(1)
["vendor_sku"]=> string(15) "NW-ME-WL-MW150R"
["vendor_description"]=> string(38) "MERCUSYS 150Mbps WL-N BROADBAND ROUTER"
["vendor_price"]=> float(11)
["date_fetched"]=> NULL
["[new]"]=> bool(true)
["[accessible]"]=> array(1) {
["*"]=>
bool(true)
}
["[dirty]"]=> array(5) {
["vendor_id"]=> bool(true)
["vendor_sku"]=> bool(true)
["vendor_description"]=> bool(true)
["vendor_price"]=> bool(true)
["date_fetched"]=> bool(true)
}
["[original]"]=> array(0) {
}
["[virtual]"]=> array(0) {
}
["[errors]"]=> array(0) {
}
["[repository]"]=> string(14) "VendorProducts"
}
可能导致这种情况发生的原因是什么?
答案 0 :(得分:1)
基本上,正如我上面评论的那样,我遇到了同样的问题,我需要提出以下内容。
$this->request->data['appointment'] = Time::parse($this->request->data['appointment']);
在此代码中:
if ($this->request->is(['patch', 'post', 'put'])) {
$this->request->data['appointment'] = Time::parse($this->request->data['appointment']);
$appointment = $this->Appointments->patchEntity($appointment, $this->request->data);
if ($this->Appointments->save($appointment)) {
$this->Flash->success(__('The appointment has been saved.'), ['plugin' => 'CakeBootstrap']);
return $this->redirect(['action' => 'index']);
} else {
$this->Flash->error(__('The appointment could not be saved. Please, try again.'));
}
}
每次保存日期时间字段时,我都不想解析日期。如果这可以自动化,我真的更喜欢它。不知道是否有工作或者我们做错了。
答案 1 :(得分:0)
我发现了同样的问题。这是适合我的解决方案。
我在实体修补后更新了日期列。例如,在您的情况下:
$newProduct = $this->VendorProducts->newEntity($product);
修补程序覆盖后再次覆盖您的数组日期列,如此
$newProduct->date_fetched = date('Y-m-d H:i:s'); // here will be what you wants to save
现在再次检查您的数据。希望它为您工作:)
$this->out("NEWPRODUCT: " . var_dump($newProduct) );