2016-09-18 4 views
2

프로젝트 & 댓글 테이블간에 hasMany 연결을 만들었습니다.케이크 PHP - HasMany 관계 저장

이 url :/projects/add에서 사용자는 새 프로젝트를 만들고 여러 주석을 쓸 수 있습니다.

요청하면이 같은 배열을 반환 :

[ 
    'name' => 'Project name', 
    'comments' => [ 
     (int) 0 => [ 
      'text' => 'This is a comment on this project' 
     ], 
     (int) 1 => [ 
      'text' => 'Comment' 
     ] 
    ] 
] 

는 발리의 의견에, 나는 MINLENGTH (30) 규칙을 추가했습니다.

위 예제에서 유효성 검사기는 두 번째 주석에 오류를 반환하고 기록을 차단합니다.

내가 원하는 것은 프로젝트와 좋은 코멘트를 저장하고 "프로젝트가 저장되었지만 하나 이상의 코멘트가 저장되지 않았습니다"와 같은 오류를 반환하는 것입니다.

도움 주셔서 감사합니다.

답변

0

This answer은 찾고자하는 것을 수행하는 한 가지 방법을 보여줍니다. 연관된 모델에 유효성 검증 오류가 있으면 hasMany 관계를 저장하고 바인드 해제하십시오.

저장 전화를 분할하는 것이 더 깔끔할 것이라고 생각합니다.

if (!$this->Project->save($this->request->data['Project'])) { 
    throw new Exception($this->Project->getErrors()); 
} 

if (!$this->Project->Comment->save($this->request->data['Comment'])) { 
    $message = 'The project has been saved, But one or more comment was not saved'; 
} 
+0

안녕하세요, 저는 다른 주제에 대한 답변의 논리를 이해하지만 귀하의 의견을 이해하지 못합니다. 답을 설명해 주시겠습니까? –

+1

문제가 없습니다. 다른 대답은 하나의 호출에서 모든 관련 데이터를 저장하려고하는 모델 연결을 이용합니다. 문제는 연관된 유효성 검사가 실패하면 연결된 데이터의 바인딩을 해제하고 다른 저장을 시도하면 엉뚱한 else 문이 있다는 것입니다. 저장 호출을 분리해도 모델 연관을 이용하지는 않지만 논리를 크게 단순화합니다. 각 호출에서 테이블 특정 데이터 만 저장하려고합니다. 즉,'comments' 유효성 검사가 실패하더라도 데이터가'projects' 테이블에 저장됩니다. – bill

+0

이 설명을위한 탱크. 그러나이 방법을 사용하면 프로젝트 양식 내에서 주석 모델을 사용할 수 있습니까? –