2017-11-18 12 views
0

TL; DR:永続化中または永続化前にフィールドがnullableかどうかを確認できますか?挿入前にカラムがNULL可能であるかどうかを確認しますか?

私は現在、「十分に完了していれば項目を挿入する」というスムーズな方法を探しています。

この単純化されたテーブルは、エンティティクラス "User"の自動生成されたテーブルです。電話機はヌル可能ですが、残りはスキーマでヌル可能ではありません。

<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を返します。

大きな質問:もちろん、バックエンドはすべてのNullableではないフィールドに情報が埋め込まれていないと、新しいエンティティを作成できないため、更新に失敗します。

したがって、フィールドが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の組み合わせは、私の好みのためにあまりにも複雑になりました。

関連する問題