蛋糕设置ID


Cakephp setting id

好的,据我所知,使用 $this->id = id将设置您的下一个请求将从数据库中获取具有该 id 的行(如果您遵循了蛋糕约定(。

现在我正在尝试设置一个值,因此在我的Product模型中创建了以下函数

        $this->id = $product_id;
    $product = $this->find('first');
    $final_amount = $product['Product']['antal'] - $amount;
    $this->saveField('Product.antal',$final_amount);

但是,当我调试它时,$product不等于我设置的id。 这意味着它只是采用了数据库表的第一个。

怎么来了?如果这不是使用$this->id的方式是什么?

设置id后,您应该使用 read 方法。 它将获得您想要的记录。
你应该打电话给$this->ModelName->read();

使用find与设置 id 无关。 它只会根据提供的选项找到一条记录。

试试这个:

$this->findById('first', $product_id);

创建或更新由模型的 id 字段控制。如果 $Model->id 设置,则更新具有此主键的记录。 否则将创建一个新记录 [...]

更多 http://book.cakephp.org/2.0/en/models/saving-your-data.html

编辑:

要更新行,请尝试此操作;

$product = $this->findById('first', $product_id);
$final_amount = $product['Product']['antal'] - $amount;
$this->saveField('Product.antal',$final_amount);

find((,如文档所示,使用条件数组来检索记录

$product = $this->Product->find('first', array('conditions' => array('id' => $id)));

请参阅 http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#find-first

旁注: $this->id目前主要用于保存记录,以便能够方便地读取新创建的主键值(ID(。它也用于通过saveField((进行保存。

在您的情况下(使用 find(( 获取乘积数组之后(:

$this->Product->id = $product['Product']['id'];
$this->Product->saveField('antal', $final_amount);

当您想使用 Model::save(( 更新该行 id 或想要使用 Model::read(( 从该行读取时,您应该为 $this->id 分配一个值。在 Model::find(( 之前设置 $this->id 对选择查询没有影响。

如果您调用 Model::find('first'(,它很可能会通过按名称分配给模型的 orderBy class 属性的列对记录进行排序来找到第一条记录,默认情况下可能是 id 字段,排序必须是 ASC。

使用 $this->id = $intVar 的理想场景如下:通话时

Model::save()//for updating records
Model::saveField();
Model::read(); 
Model::delete();//for deleting