CakePHP3:newEntity()Nulls Date

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CakePHP3:newEntity()Nulls Date相关的知识,希望对你有一定的参考价值。

我想在Cake Shell中的Cakephp3中保存一个实体。

这是我正在使用的代码,添加了一些调试:

$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: 
 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(AppModelEntityVendorProduct)#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"
}

是什么导致这种情况发生?

答案

基本上我在上面评论过,我遇到了同样的问题,我需要提出以下内容。

    $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.'));
    }
}

我真的不想在每次保存日期时间字段时解析日期。如果这可以自动化,我真的更喜欢它。不知道是否有工作或者我们做错了。

另一答案

我发现了同样的问题。这是适合我的解决方案。

我在实体修补后更新了日期列。例如在你的情况下:

$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) );

以上是关于CakePHP3:newEntity()Nulls Date的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 3 - 保存前的数据关联

CakePHP 3 新实体保存失败且没有错误

休眠错误消息:意外令牌:NULLS(脚本文件行中的错误:13 意外令牌:NULLS)

Nulls first和nulls last

如何在 MySQL 排序中控制 nulls-first 或 nulls-last?

Oracle 排序中使用nulls first 或者nulls last 语法