良いタイトルを見つけるのは難しいと思います。もっとよく説明できるといいのですが。私は2つのテーブルを持っています
"car" - id, car_id, name
"car_pictures" - id, fk_car_id, url
明らかに、「車」には、「car_pictures」テーブルに「fk_car_id」として保存されたcar_idによってリンクされた複数の画像を含めることができます。フロントエンドのワークフローは次のようになります。
- you add a new car to the database
- you add pictures to this car entry
この方法に従うと、最初に「車」テーブルに新しいエントリを作成します。次に、「car_pictures」テーブルで参照できる「car_id」があります。
しかし、次のようにワークフローを変更したい場合はどうでしょうか。
- you add a new car
- you immediately add pictures
- you save the new car to the database
この方法に従うと、ユーザーがすべての「ステップ」を完了した場合にのみデータベースエントリを作成します。ただし、車に写真を追加する場合は、まだ「car_id」はありません。したがって、IDを参照することはできません。
たとえば、車の追加と写真の追加が2つの別々のAPI呼び出しである場合、これを行う通常の方法は何ですか。
自分が何をしているのかを明確にする必要があるようです。2つのAPI呼び出しがあるとしましょう:www.domain.com/api/car/add/?name=newcar->車を追加する(つまり、データベースに追加する)www.domain.com/api/car/picture/ add /?car_id = x->車に写真を追加するため(つまり、アップロードを処理し、データベースにデータを配置する)
フロントエンドは次のようになります。編集したり、別のページで新しい写真を追加したりできる、すべての車を含むテーブルのあるページ。写真を追加する可能性もある新車を追加する別のページ。これは、car_idが使用できないという点でのみ、車を編集する場合と同じページ/フォームになります。
編集:
私自身、このケースを処理するいくつかの方法を考えることができます。
最初に:ユーザーが「新しい車を追加」フォームを開いた直後に、車のデータベースエントリを作成します。そうすれば、常にcar_idが得られます。ただし、ユーザーが車の追加をキャンセルし、それらの「ダミー」データベースエントリを削除する必要がある場合は、処理する必要があります。そこで何か問題が発生した場合、データベースに空の車のエントリがたくさんあることになります。おそらく、行には、ユーザーが実際に車を「挿入」したときに設定されるフラグがあります。
2番目:一時的に負のfk_car_idを持つ新しい画像を挿入し、行がデータベースに作成されている場合は、それらの行を実際のcar_idで更新します。
3番目:car_idがまだない場合は、新しい画像を一時IDの一時テーブルに保存します。次に、データベースに車のエントリを作成するときに、その一時IDを返し、それらのエントリを一時テーブルから移動する必要があります。
しかし、それらのアイデアは複雑に聞こえるので、それを行うためのベストプラクティスの方法があることを望みました。たぶん、問題は私のワークフロー自体にあり、それを行うためのより良い方法があります。それでも、車を追加するプロセスとデータベースに写真を追加するプロセスを分離することは良い考えのようです。