私はthis guyの反対の問題があります。 DBICは、対応するステータスオブジェクトを作成する必要があるかどうかを調べるためにSELECT
を実行し、またはであれば1になる舞台裏関連オブジェクトを再フェッチせずに行を作成するにはどうすればよいですか?
$rs->create({ foo => 'bar',
status => { label => 'Active' } });
:
は、私は多くのことを、このパターンを使用するために使用されるアプリケーションを持っていますラベル「アクティブ」が存在します。存在すれば、そのIDは作成しているオブジェクトのFKの値として使用されます。
状況はほとんど変わることはなく、非常に多くのステータスがないので、99.99%の時間は基本的にDBへの無駄なクエリです。代わりにENUMを使用することを考えましたが、アプリケーションの初期段階であるため、最初の数週間でいくつかの新しいステータスがポップアップするようになりました。 INSERTはALTER TABLE status CHANGE label label ENUM(...)
よりも***の痛みが少ないです。テーブル内にこれらを追加すると、UIでドロップダウンを簡単に作成できます。
ここでget_THING_id
の束があり、それはTHING
というラベルを付けてIDを返します。 get_THING_id
機能はmemoizedであり、私たちはこれを行う:
$rs->create({ foo => 'bar',
status_id => get_status_id('Active') });
それは非常にDBIC-Y感じていない、それはすべての場所の上にそれらをインポートする必要が厄介です。
ENUMを使用するだけでよいのですか?このタイプの小さなテーブルのために人々は何をしていますか?
Resultオブジェクトを最初のコードブロックの構文で 'status'として渡すことはできますか? – simbabque
@simbabque私は持っていないので、基本的に再びmemoizationです '' Active "=> $ active_status'のようなマップを維持することを意味します。 –