사용자 주소를 저장하기 위해 데이터베이스에 user_addresses
테이블이 있습니다. 사용자는 많은 주소를 저장할 수 있기 때문에 그 중 하나만 Primary of Default Address
이됩니다. 주소를 Primary Address
으로 설정하려면 테이블 인 1 if primary else 0 for non primary
열이 있어야합니다.CakePHP 3 : 형식이없는 데이터베이스에서 단일 필드 업데이트
이제 사용자는 나중에 언제든지 변경할 수있는 기본 주소를 하나만 가질 수 있습니다. 이렇게하려면 default_flag != 1
및 그 옆에있는 버튼을 primary address
으로 설정하는 모든 주소를 나열했습니다. 사용자가 버튼을 클릭하면 주소는 기본 및 이전 주 주소로 설정되고 default_flag
은 0
으로 설정됩니다.
나는 그렇게하려고 시도했다.
두 개의 키가 updatePrimaryAddress
액션으로 전달되어 postButton
을 생성했습니다. 하나는 기본으로 설정할 주소의 ID이고 다음은 이미 기본 주소 인 ID입니다. 버튼의 클릭에 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());
}
}
에서
<?= $this->Form->postButton(__('Choose'), ['controller' => 'UserAddresses', 'action' => 'updatePrimaryAddress', $nonPrimaryAddress->id, $primaryAddressId], ['class' => 'btn btn-success pull-left']) ?>
, 페이지를 다시로드되지만 데이터베이스에는 데이터가 변경됩니다.
FIrst : 포스트 버튼을 사용하지만 컨트롤러에서 포스트 데이터를 읽지 않습니다. 내 제안 : 게시 버튼 대신 간단한 링크를 사용하십시오. 둘째 : 나는 당신의 논리가 확실하다고 확신하지 못한다. $ address와 $ primaryAddress는 실제로 모두 $ id에서 왔기 때문에 실제로 같은 엔티티이다. 셋째, 사용자가 다른 사용자의 기본 주소를 바꿀 수 있기 때문에 주소를 변경하는 것에 대해 몇 가지 확인을 할 것입니다. – arilia
이 작동 중입니다 ... 작업 코드로 제 질문을 업데이트했습니다. 그리고 실수를 바로 잡아 주셔서 감사합니다. –
아직 이유없이 게시 버튼을 사용하고 있으며 누구든지 URL을 방문하여 다른 사용자의 기본 주소를 쉽게 변경할 수 있으므로 보안 문제가 있습니다. 또한 사용자는 둘 이상의 주소를 기본값으로 설정할 수 있습니다. – arilia