Cakephp设置ID

时间:2013-10-12 19:38:27

标签: php cakephp

好的,据我所知,使用$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 个答案:

答案 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