2017-11-18 15 views
0

TL : DR : 필드가 nullable인지 여부를 확인할 수 있습니까?삽입하기 전에 Null 입력 가능 여부를 확인 하시겠습니까?

현재 "충분히 기입하면 항목을 삽입하십시오"양식을 구현하는 데는 매끄러운 방법을 찾고 있습니다.

이 단순화 된 테이블은 엔터티 클래스 "사용자"에 대한 자동 생성 된 테이블입니다. 전화 번호는 null 입력 가능하고 나머지는 스키마에서 Null 가능하지 않습니다.

<table> 
    <tr data-id="25"> 
    <td><input type="text" data-property="FirstName">Alice</td> 
    <td><input type="text" data-property="LastName">Smith</td> 
    <td><input type="text" data-property="Mail">[email protected]</td> 
    <td><input type="text" data-property="Phone"></td> 
    </tr> 
    ... more populated rows and at the end one empty row for new entries 
    <tr data-id="*"> 
    <td><input type="text" data-property="FirstName"></td> 
    <td><input type="text" data-property="LastName"></td> 
    <td><input type="text" data-property="Mail"></td> 
    <td><input type="text" data-property="Phone"></td> 
    </tr> 
</table> 

는 I는 입력 필드가 변경되는 경우에있어서, 백엔드 데이터 속성 값 데이터 ID를 전송하는 간단한 Ajax 호출있다. 백엔드는 이것이 업데이트인지 삽입인지 (data-id == *)를 결정하고 액션을 수행하고 삽입 된 경우 새 ID를 반환합니다.

큰 질문 : null이 아닌 모든 필드가 정보로 채워지지 않으면 백엔드가 새 엔티티를 만들 수 없기 때문에 업데이트가 실패합니다.

그래서 필드가 nullable인지 아닌지를 동적으로 검사 할 가능성이 있는지 궁금합니다.

+0

사용자 정의 유효성 검사기를 작성하고 doctrine 연결 객체를 사용하여 스키마 정보를 검사 할 수 있다고 가정합니다. http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/schema-representation .html – Cerad

+0

고마워! 그게 내가 필요한 정보의 양 이었어! 나중에 내 솔루션을 게시 할 것입니다! – fridde

답변

0

Cerad의 힌트 덕분에 작동하는 것처럼 보이는 함수를 작성할 수있었습니다! 마음에 드는대로 자유롭게 수정하십시오!

클래스 이름은 정규화되어 있어야합니다. 내 솔루션에 ShortName::class을 사용합니다.

public function getNonNullableFieldNames(EntityManagerInterface $EM, string $class_name) 
{  
    $table_name = $EM->getClassMetadata($class_name)->getTableName(); 
    $columns = $EM->getConnection()->getSchemaManager()->listTableColumns($table_name); 

    $nonnullable_fields = []; 
    foreach($columns as $col){ 
     if($col->getNotnull()){ 
      $nonnullable_fields[] = $col->getName(); 
     } 
    } 
    return $nonnullable_fields; 
} 

은 내가 foreach는 루프 특히 자랑 아니지만, array_maparray_filter의 조합은 내 취향이 너무 복잡했다.