2010-09-01 194 views
31

我想要一个函数将一个字段“is_featured”更改为给定ID的事件模型的1(真),以将事件标记为“精选”。如何在CakePHP中更新1字段?

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

回答

68

您可以使用saveField到例如

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

saveField函数是否属于控制器或模型类? – gkalikapersaud 2014-05-21 20:44:34

+2

@ user2128444它是一个模型函数,但您可以在控制器和模型中使用它。答案中的示例将放置在控制器中。在模型中使用它将看起来像这样:$ this-> id = $ id; $ this-> saveField('is_featured',true);'。 – Hippie 2014-05-24 09:18:19

+0

你好,我想知道是什么时候表没有id字段和如何保存?它不是id在我的表中使用pid。 ** $ this-> Event-> pid = $ id **不正确?如何检查我的情况.. – 2015-03-12 07:58:37

10

您可以通过两种方式在一个领域进行更新为此 :

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

OR

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

在第二个e xample,第一阵列将更新定义的字段和第二阵列的值定义了“WHERE”条件

+2

-1有两种以上的方式来保存一个字段。最明显的两个是[saveField](http://book.cakephp.org/2.0/en/models/saving-your-data。html#model-savefield-string-fieldname-string-fieldvalue-validate-false)和[save](http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-保存阵列数据无效布尔验证-真阵列字段列表阵列)。 updateAll不是一个好主意,如果没有必要,并且由于写入会产生sql错误,因为[字段被视为sql表达式](http://book.cakephp.org/2.0/en/models/saving-your-data html的#模型updateall阵列场阵列条件)。 – AD7six 2013-06-21 08:47:01

11

也可以使用设置()方法

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

可以使用这种技术来更新字段(一个或多个)

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

如果你不希望修改字段保存时添加一些数据'modified' => false到您的$ data数组 如果不通过ID,机型不能设置主键自动更新和将“添加”而不是“e DIT”领域(S)

+0

在我看来,当你需要更新多个领域时,这是最安全的方法。如果只有一个字段需要更新,我会使用'saveField'。 – marcocamejo 2015-12-04 13:43:22

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); 
    

来源:http://book.cakephp.org/3.0/en/orm/saving-data.html

0

奇怪;有时候我喜欢诉诸于普通的旧SQL:一个班轮+无开销那里,让我确信没有回调/事件涉足

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

你可以做到这一点很容易(注意这可能不是你想要的!) way

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