CakePHP에 대한 작은 프로젝트가 있습니다. 기사라는 테이블과 카테고리, 태그, 이미지 등과 같은 5 개의 테이블 필드가 있습니다. 연관은 대부분 HasOne이고 관련 테이블에는 여러 개의 열이 있습니다. 기사에 데이터를 저장할 때 테이블 모든 것이 좋아 보인다하지만 일부 단체에, 예를 들어 : 기사 -> 평가, 나는 널 (null)로 저장되고 평가 테이블의 일부 필드, 최대 기입하지 않은 경우 :CakePHP 빈 연결 필드가 무시 대신 저장됩니다.
+----+------------+--------------+
| id | article_id | rating_value |
+----+------------+--------------+
| 1 | 36 | 3 |
| 2 | 56 | 5454.56 |
| 3 | 57 | 4 |
| 5 | 51 | NULL |
+----+------------+--------------+
을 몇 가지 유효성 검사를 추가하면 유효성 검사가 필요한만큼 기사를 저장할 수 없습니다. 내가 원했던 것은 rating_value가 비어 있으면 null (엔티티 거부)으로 작성되어서는 안되며 아티클을 저장해야한다는 것입니다. 기사 삭제가 예상대로 작동하면 관련된 모든 항목이 삭제됩니다.
Model.beforeMarshall에서 $ 데이터를 변경하려고 시도했지만 클래스가 개인용 테이블 및 등급 (내 생각으로는 연결이 문제 일 수 있음).
일부 코드 (컨트롤러 추가는) :
public function add()
{
$article = $this->Articles->newEntity();
if ($this->request->is('post')) {
$article = $this->Articles->patchEntity($article, $this->request->data, [
'associated' => [
'Ratings',
]
]);
if ($this->Articles->save($article)) {
$this->Flash->success(__('Saved.'));
return $this->redirect(['action' => 'index']);
}
}
$this->set('article', $article);
}
나는 이것 때문에 모든 관련 모델의 모든 검증을 삭제.
// Articles Table
$this->hasOne('Ratings', [
'className' => 'Ratings',
'dependent' => true,
]);
// Ratings Table
$this->belongsTo('Articles', [
'foreignKey' => 'article_id',
'joinType' => 'INNER'
]);
// Rating.php Entity
protected $_accessible = [
'*' => true,
'id' => false
];
// Article.php Entity
protected $_accessible = [
'*' => true,
];
"** _ 나는 Model.beforeMarshall에 $ 데이터를 변경 시도 _ **"... 그 (방법 중 하나 이상)를 갈 수있는 방법대로 시도했다 보여준다. 또한 "** _ 클래스는 비공개 _ **"입니다.이 문장은 실제로 나에게 의미가 없습니다. – ndm
문서에 대한 'var_dump ($ 데이터)'표시'개체 (ArrayObject) [272] private 'storage'=> ...'그리고 나는 데이터를 수정할 수 없으며 Ratings.beforeMarshall과 동일한'object (ArrayObject) [231] private 'storage'=> ... ' –
그게 [** 배열 객체 **] (http://php.net/arrayobject)를 덤프하는 것은 그 내부 구조는 비공개이지만 데이터 제한없이 액세스 할 수 있습니다. 다른 배열을 편집하는 것처럼'$ data'를 편집하십시오. ** https : //book.cakephp.org/3.0/en/orm/saving-data.html#modifying-request-data-before-building-entities** – ndm