2014-09-23 51 views
0

我嘗試做一個管理票務系統。所以我有一個用戶模型如下:CakePHP FindById只與一個數字運行

App::uses('AppModel', 'Model'); 
App::uses('SimplePasswordHasher', 'Controller/Component/Auth'); 

class User extends AppModel { 
    public $name = 'User'; 
    public $hasMany = 'Ticket'; 
    public $validate = array(
     'username' => array(
      'required' => array(
       'rule' => array('notEmpty'), 
       'message' => 'Un nom d\'utilisateur est requis.' 
      ) 
     ), 
     'password' => array(
      'required' => array(
       'rule' => array('notEmpty'), 
       'message' => 'Un mot de passe est requis.' 
      ) 
     ), 
     'role' => array(
      'valid' => array(
       'rule' => array('inList', array('administrateur', 'developpeur', 'technicien', 'commercial')), 
       'message' => 'Merci de rentrer un rôle valide', 
       'allowEmpty' => false 
      ) 
     ) 
    ); 

    public function beforeSave($options = array()) { 
     if (isset($this->data[$this->alias]['password'])) { 
      $passwordHasher = new SimplePasswordHasher(); 
      $this->data[$this->alias]['password'] = $passwordHasher->hash(
       $this->data[$this->alias]['password'] 
      ); 
     } 
     return true; 
    } 
} 

當用戶輸入用戶名和密碼登錄,它涉及到管理區域應該在哪裏門票列表中的用戶

這裏是我的模型我的票:

App::uses('AppModel', 'Model'); 

class Ticket extends AppModel { 
    public $name = 'List'; 
    public $tablePrefix = 'tickets_'; 
    public $belongsTo = array(
          'User' => array(
          'foreignKey' => 'username_id' 
         ) 
    ); 

} 

下面是我的控制器票代碼:

class TicketsController extends TicketAppController{ 

    public function index(){ 
     $this->request->data['Ticket']['username_id'] = $this->Auth->user('id'); 
     $this->set('list', $this->Ticket->findById($this->data['Ticket']['username_id'])); 
    } 

} 

當我把findById(5),例如我有權利票證與關聯的用戶關聯時出現。但是,不管用戶通過它的身份證顯示什麼,而不是5?

+0

您是否嘗試過使用我發佈的答案? – Sadikhasan 2014-09-23 09:42:21

回答

2

我想這:

class TicketsController extends TicketAppController{ 

    public function index(){ 
     $this->request->data['Ticket']['username_id'] = $this->Auth->user('id'); 
     $this->set('list', $this->Ticket->findById($this->data['Ticket']['username_id'])); 
    } 

} 

應該是這樣的:

class TicketsController extends TicketAppController{ 

    public function index(){ 
     $this->request->data['Ticket']['username_id'] = $this->Auth->user('id'); 
     $this->set('list', $this->Ticket->findByUsernameId($this->data['Ticket']['username_id'])); 
    } 

} 

標記findByUsernameId。您正在搜索username_id,而不是票證的ID。 明白了嗎? ;)

+0

而且,我應該重命名字段'user_id',不'username_id';在這2例) – Bob 2014-09-23 09:32:19

+0

同樣的問題:當我嘗試$的var_dump列出它返回數組(0){} – Syniscoborn 2014-09-23 11:45:15

+0

@ user3601175:使用'調試()''function調試你的數據。 '$ this-> data [「Ticket」]'應該是'$ this-> request-> data [「Ticket」]'。查看'index()'方法中的第一個和第二個規則之間的區別 - 方法 – Bob 2014-09-23 14:46:08

0

你不能改變$this->request->data因此要儘量可變$ user_ID的 而不是$這個 - >請求 - >數據[ '票'] [ 'username_id']

class TicketsController extends TicketAppController{ 

    public function index(){ 
     $user_id = $this->Auth->user('id'); 
     $this->set('list', $this->Ticket->findById($user_id)); 
    } 

}