2013-01-09 2 views
1

사용자가 특정 사용자에게 파일을 업로드하고 파일을 업로드 할 수있는 응용 프로그램에 대해서는 tutorial을 따르고 있습니다.Cakephp HABTM join table empty

upload.php로 :

var $hasAndBelongsToMany = array(
    'SharedUser' => array(
     'className' => 'User', 
     'joinTable' => 'uploads_users', 
     'foreignKey' => 'upload_id', 
     'associationForeignKey' => 'user_id', 
     'unique' => 'keepExisting' 
    ) 
); 

User.php : 그것은 하나 개의 예외로 정상적으로

var $hasMany = array(
    'Upload' => array(
     'className' => 'Upload', 
     'foreignKey' => 'user_id', 
     'dependent' => false 
    ) 
); 

var $hasAndBelongsToMany = array(
    'SharedUpload' => array(
     'className' => 'Upload', 
     'joinTable' => 'uploads_users', 
     'foreignKey' => 'user_id', 
     'associationForeignKey' => 'upload_id', 
     'unique' => true 
    ) 
); 

모든 것

이 작업을 다음과 같이 사용자와 업로드 간의 HABTM 관계가있다 새 업로드 작성시 uploads_users 테이블이 갱신되지 않습니다. 데이터를 수동으로 삽입하면 뷰를 사용하여 데이터를 찾고 표시 할 수 있습니다. 누구든지 잘못된 것을 제안 할 수 있습니까? 여기

는 uploads_users 테이블입니다 : 내가 튜토리얼에서 추가 업로드 방법을 약간 변경 한

+-----------+----------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-----------+----------+------+-----+---------+----------------+ 
| id  | int(11) | NO | PRI | NULL | auto_increment | 
| upload_id | char(36) | NO |  | NULL |    | 
| user_id | char(36) | NO |  | NULL |    | 
+-----------+----------+------+-----+---------+----------------+ 

(그래서 실패 저장 데이터베이스가있는 경우는 업로드 된 파일을 삭제), 그래서 여기에 그뿐만 아니라입니다 :

function add() { 
    if (!empty($this->data)) { 
    $this->Upload->create(); 
    if ($this->uploadFile()) { 
     try { 
     if (!$this->Upload->saveAll($this->request->data)) { 
      throw new Exception('Couldn't save to database.'); 
     } 
     $this->Session->setFlash(__('The upload has been saved', true)); 
     $this->redirect(array('action' => 'index')); 
     } 
     catch (Exception $e) { 
     unlink(APP . 'tmp/uploads/' . $this->request->data['Upload']['id']); 
     $this->Session->setFlash(__('The upload could not be saved: ' . $e->getMessage(), true)); 
     } 
    } else { 
     $this->Session->setFlash(__('The upload could not be saved.', true)); 
    } 
    } 
    $users = $this->Upload->User->find('list'); 
    $this->set(compact('users', 'users')); 
} 

function uploadFile() { 
    $file = $this->data['Upload']['file']; 
    if ($file['error'] === UPLOAD_ERR_OK) { 
    $id = String::uuid(); 
    if (move_uploaded_file($file['tmp_name'], APP.'tmp/uploads'.DS.$id)) { 
     $this->request->data['Upload']['id'] = $id; 
     $this->request->data['Upload']['user_id'] = $this->Auth->user('id'); 
     $this->request->data['Upload']['filename'] = $file['name']; 
     $this->request->data['Upload']['filesize'] = $file['size']; 
     $this->request->data['Upload']['filemime'] = $file['type']; 
     return true; 
    } 
    } 
    return false; 
} 

답변

1

요청 -> 데이터에 무엇이 있는지 확인하는 것이 유용 할 것입니다. 요리 책에 쓰여 있듯이 관련 모델 구조를 사용해야합니다.

그것은 다음과 같아야합니다

$this->request->data['Upload']['id'] = $id; 
$this->request->data['Upload']['user_id'] = $this->Auth->user('id'); 
... 
$this->request->data['SharedUser']['id'] = $this->Auth->user('id'); 

또한 나는 당신의 belongsTo를 관계는 당신의 방법 "을 UploadFile"에 표시된 볼 수 없었다. "업로드"모델에서 필요하지 않을 수도 있습니다.

+0

감사합니다. 실제로 내 문제의 원인이었던 SharedUser 행이 누락 된 것 같습니다. – knirirr