皆さん、現在、関連するテーブルの行を含むフォームを処理しています。課題:F3では、関連するテーブルの行が追加、変更、または削除される可能性のあるフォームを処理する最善の方法は何ですか?Fat-Free-Framework:DB SQL Mapperを使用して関連テーブルのレコードを追加/変更/削除する方法
DBスキーマ
practitioner
------------------------------
id | int(10)
first_name | varchar(255)
last_name | varchar(255)
abn | char(11)
mobile | varchar(20)
email | varchar(255)
practice_site
------------------------------
id | int(10)
name | varchar(255)
provider_number
------------------------------
id | int(10)
practice_site_id | int(10)
practitioner_id | int(10)
provider_number | varchar(20)
フォーム
- プロバイダ番号が動的に追加され、フォーム名は、例えば、
_n
で修正されていますprovider_number_3
- 削除ボタンは
プロバイダ番号は何かビットに変換され
provider_number_1
とprovider_number_3
が、無provider_number_2
フォーム出力があるかもしれないという意味、完全に行を削除します*_n
より管理しやすい
他のフィールド、id
、first_name
などは、copyfrom()
のおかげで簡単に更新されます。
Array
(
[id] => 1
[first_name] => Jon
[last_name] => Doctor
[abn] => 12345678902
[mobile] => 0491729472
[email] => [email protected]
[provider_numbers] => Array
(
[0] => Array
(
[provider_number] => ASBDF24
[practice_site_id] => 2
)
[1] => Array
(
[provider_number] => 1249FBK
[practice_site_id] => 2
)
)
)
フォームが送信されたときに、プロバイダ番号についてのいくつかの条件が発生する可能性が問題
:
- 新しいプロバイダ番号がプロバイダの数がある
- 追加されます変更された
- 練習サイトが変更されました
- プロバイダの数はこれについて行かするための最良の方法だろうどのように
を除去して? (好ましくはFat-Free-FrameworkのDB\SQL\Mapper
クラスを使用します)。
考えられる解決策:
provider_id = POST.id
- 形式ではありません、データベース内のすべてのレコードを検索し
array_diff()
を実行しますが、その後のDELETE
声明を行う既存のprovider_number
テーブルの配列を取得するために$db->exec()
を実行します。それらのレコード。元の配列を切り捨てます。 provider_number
が一致するかどうかを調べる配列を横断します。そうであればpractice_site_id
が違うので、更新してください。practice_site_id
が同じ場合は何もしないでください。provider_number
が特定のものに対して変更されたかどうかを正確に判断する方法practice_site_id
?
別の可能性:
- 変更形態でxfra35 @から提案後にデータベース
あなたの最後の提案は、最も単純な解決策( 'provider_number.id'を含む)のように見えます。この方法では、 '$ providerNumber-> load(['id =?'、$ id])'が必要で、idが既存のレコードと一致するかどうかによってマッパーは自動的に挿入または更新されます。また、削除されたレコードを追跡する必要があります。これは余分な非表示のブール型 'erase'フィールドで実現できます。 – xfra35