在 CakePHP 中保存没有数据的模型(只需在 db 中创建 id)

Posted

技术标签:

【中文标题】在 CakePHP 中保存没有数据的模型(只需在 db 中创建 id)【英文标题】:Saving a model with no data in CakePHP (just create id in db) 【发布时间】:2014-02-21 16:40:03 【问题描述】:

我的 Cakephp Cart 模型/表只有一个字段:id

它有很多LineItems

我没有成功单独保存购物车模型:

$this->Cart->create();
$this->Cart->save();

或者,通过传递一个$data数组并使用saveAssociated()

$data = array(
    'Cart' => array(),
    'LineItem' => array(
        array(
            'item_id' => $item_id,
            'qty' => $qty,
            'price_option_id' => $price_option_id
        )
    )
);

如果我将useless_field 添加到Cart 表/模型中,并在其中传递一些数据保存。所以很明显,问题在于我有一个模型,它的表只有一个 id 字段,并且没有传递任何其他数据来保存。它不会创建它必须假设为“空”的记录。

我已将'validate' => false 传递给saveAssociated 调用,但它没有任何区别(并且此模型没有验证可忽略)。

有没有办法做到这一点?我错过了什么吗?请赐教!

【问题讨论】:

嗯,这听起来像是一个尴尬的数据库设计。只有一个主键的购物车表有什么用?检查我的购物车插件,我会说我有一些电子商务和 CakePHP 的经验github.com/burzum/cakephp-cart-plugin 这是一款学习玩具。购物车只是为了将 LineItems 绑定到现在,我没有其他特定于购物车的数据要保存。 猜猜你可能已经发现了保存的问题,因为它预计会有一些数据存在,因为这是一个非常不寻常的情况。 感谢您的回复,burzum。您的插件也非常值得学习。 CakePHP 表需要createdmodified 字段,或者让您定义自己的字段(即您可以随意调用它们,但它们的作用相同)。 【参考方案1】:

CakePHP 表需要创建和修改字段,或者让您定义自己的字段(即,您可以随意调用它们,但它们的作用相同)。

在这种情况下,您将使用

$this->Cart->set($data);
$this->Cart->saveAll();

【讨论】:

据我所知,模型不需要创建/修改字段(我有几个没有它们)。使用set() 并没有什么不同。对于只有一个 id 字段的模型,saveAssociated()saveAll() 调用仍会返回 false,即使在与它一起保存 hasMany 关系时也是如此。 你用的是什么版本的蛋糕?

以上是关于在 CakePHP 中保存没有数据的模型(只需在 db 中创建 id)的主要内容,如果未能解决你的问题,请参考以下文章

Cakephp - 条件保存

CakePHP - 当某些字段为空时,防止模型数据保存在 saveMany 调用中

CakePHP 2.1 - 模型关联 - 保存和查找

CakePHP - 如何在保存时将关联记录添加到模型中?

在 Cakephp 3 中保存关联模型

CakePHP:将数据保存到 3 个不同的模型