我在數據庫中有一個user_addresses
表來存儲用戶的地址。由於用戶可以存儲很多地址,但只有其中一個地址是Primary of Default Address
。要將地址設置爲Primary Address
,表格的列號爲default_flag
,即1 if primary else 0 for non primary
。CakePHP 3:更新數據庫中的單個字段而不是表格
現在由於用戶只能有一個主地址,他可以隨時更改。爲此,我列出了所有地址,其中default_flag != 1
及其旁邊的按鈕將其設置爲primary address
。當用戶點擊該按鈕時,地址被設置爲主要地址,並且之前的主要地址default_flag
被設置爲0
。
我試過這樣做。
我創建了一個postButton
,其中兩個密鑰傳遞給updatePrimaryAddress
動作,一個是要設置爲主要地址的地址,而另一個是已經是主要地址的地址的ID。
<?= $this->Form->postButton(__('Choose'), ['controller' => 'UserAddresses', 'action' => 'updatePrimaryAddress', $nonPrimaryAddress->id, $primaryAddressId], ['class' => 'btn btn-success pull-left']) ?>
在UserAddressesController
<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\ORM\TableRegistry;
/**
* UserAddresses Controller
*
* @property \App\Model\Table\UserAddressesTable $UserAddresses
*/
class UserAddressesController extends AppController
{
public function updatePrimaryAddress($id = null, $primaryAddress = null)
{
$userAddresses = TableRegistry::get('UserAddresses');
$primaryAddress = $userAddresses->get($primaryAddress);
$primaryAddress->default_flag = 0;
$userAddresses->save($primaryAddress);
$address = $userAddresses->get($id);
$address->default_flag = 1;
$userAddresses->save($address);
return $this->redirect($this->referer());
}
}
在按鈕的點擊,頁面重新加載,但在數據庫中沒有數據更改。
FIrst:您使用發佈按鈕,但您從未讀取控制器中的發佈數據。我的建議:使用簡單的鏈接,而不是一個帖子按鈕。第二:我不確定你的邏輯是否一致:$ address和$ primaryAddress實際上是同一個實體,因爲它們都來自$ id。第三我會做一些關於用戶更改地址的檢查,因爲現在任何用戶都可以更改其他人的默認地址 – arilia
讓它工作...更新我的問題與工作代碼。並感謝您糾正錯誤。 –
您仍然在使用發佈按鈕,沒有任何理由,並且您還有安全問題,因爲任何人都可以通過訪問網址輕鬆更改其他用戶的默認地址。另外,用戶可以將多個地址設置爲默認地址。 – arilia