好的,据我所知,使用$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
的方式是什么?
答案 0 :(得分:2)
设置id
后,您应该使用read
方法。它会得到你想要的记录。
你应该致电$this->ModelName->read();
使用find
与设置ID无关。它只会根据提供的选项找到记录。
答案 1 :(得分: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);
答案 2 :(得分: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);
答案 3 :(得分:0)
如果要使用Model :: save()更新该行ID,或者想要使用Model :: read()从该行读取,则应该为$ this-> id分配一个值。在Model :: find()之前设置$ this-> id对选择查询没有影响。
如果您将调用Model :: find('first'),它很可能会通过按列排序记录找到第一条记录,其名称分配给model的orderBy类属性,默认情况下可能是id字段和排序必须是ASC。
使用$ this-> id = $ intVar的理想情况如下: 在打电话时
Model::save()//for updating records
Model::saveField();
Model::read();
Model::delete();//for deleting