2010-09-01 153 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