1

好的,据我所知,使用$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什么的方法?

4

4 回答 4

2

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

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

于 2013-10-12T20:08:53.720 回答
1

尝试这个:

$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);
于 2013-10-12T19:48:24.453 回答
1

如文档所述,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);
于 2013-10-12T19:50:06.907 回答
0

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

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

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

Model::save()//for updating records
Model::saveField();
Model::read(); 
Model::delete();//for deleting
于 2013-10-23T19:43:31.857 回答