如何更新CakePHP中的1个字段?

时间:2010-09-01 07:22:19

标签: cakephp

我想要一个函数将一个字段,“is_featured”改为给定ID的事件模型的1(true),以将事件标记为“精选”。

class EventsController extends AppController{
function feature($id){}
}

7 个答案:

答案 0 :(得分:74)

您可以使用saveField执行此操作 例如

$this->Event->id = $id;
$this->Event->saveField('is_featured', true);

答案 1 :(得分:12)

您可以通过两种方式在一个字段中执行更新:

    $this->Model->id=$id;
    $this->Model->saveField("fieldName","value");

OR

    $this->Model->updateAll(array("fieldName"=>"value"),array("fieldName"=>"condition"));

在第二个例子中,第一个数组将更新定义字段中的值,第二个数组定义" WHERE"条件

答案 2 :(得分:11)

您也可以使用set()方法

$this->Model->read(null, $id);
$this->Model->set(array(
      'fieldname' => 'value',
));
$this->Model->save();

答案 3 :(得分:3)

在cakephp 3中更新您的数据:

  1. 包含在您的控制器中:

    use Cake\ORM\TableRegistry;

  2. 在你的行动中:

    $articlesTable = TableRegistry::get('Articles');
    $article = $articlesTable->get(12); // Return article with id 12
    
    $article->title = 'CakePHP is THE best PHP framework!';
    $articlesTable->save($article);
    
  3. 来源:http://book.cakephp.org/3.0/en/orm/saving-data.html

答案 4 :(得分:1)

您可以使用此技术更新字段

$this->Event->save($this->request->data, true, array('id', 'is_featured'))

如果您不希望在保存某些数据时自动更新已修改的字段,请将'modified' => false添加到$ data数组 如果您未传递ID,则模型无法设置其主键并将“添加”而不是“编辑”字段

答案 5 :(得分:0)

奇怪;有时我喜欢使用普通的旧sql:单行+没有开销,确保没有涉及回调/事件(请注意这可能不是你想要的!)

$id = (int) $id;
$this->Event->query("UPDATE events SET is_featured=1 WHERE id=$id");

答案 6 :(得分:0)

你可以轻松地做到这一点

$this->Event->saveField('username', $user); //Where username is Model field name and $user is value