私はRORを初めて使用し、貨物追跡プロジェクトに取り組んでいます。アイデアは、ユーザーが追跡番号で貨物を追跡するときに、現在の場所と渡された場所の履歴が表示されるように、出荷場所へのすべての変更をログに記録することです。
shippings テーブルと shipping_locations テーブルがあります。
出荷
+--------------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | start_address_id | int(11) | YES | | NULL | | | end_address_id | int(11) | YES | | NULL | | | transportation_agency_id | int(11) | YES | MUL | NULL | | | customer_id | int(11) | NO | MUL | NULL | | | status_id | int(11) | NO | MUL | NULL | | | cargo_id | int(11) | YES | MUL | NULL | | | tracking_number | varchar(255) | NO | MUL | NULL | | | mode_of_transport_id | int(11) | YES | MUL | NULL | | | expected_start_date | date | YES | | NULL | | | actual_start_date | date | YES | | NULL | | | expected_end_date | date | YES | | NULL | | | actual_end_date | date | YES | | NULL | | | created_at | datetime | NO | | NULL | | | updated_at | datetime | NO | | NULL | | | admin_user_id | int(11) | YES | MUL | NULL | | +--------------------------+--------------+------+-----+---------+----------------+
shipping_locations: (場所の更新は、(current_location) の下のこのテーブルで行われます)
+------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | shipment_id | int(11) | NO | MUL | NULL | | | current_location | varchar(255) | YES | | NULL | | | final_location | text | YES | | NULL | | | created_at | datetime | NO | | NULL | | | updated_at | datetime | NO | | NULL | | +------------------+--------------+------+-----+---------+----------------+
Shipment_history (提案)
田畑:
- ID
- shipping_id
- 現在位置
- created_at
- updated_at
ユーザーが取得できるように、shipping_locations テーブルからこの履歴テーブルにすべての更新を保存したいと思います。
Time (Updated_at):----------------------------> Location:(current_location)
1/12/2012 11:30 222 John st.
1/12/2012 13:00 555 Paul st.
1/13/2012 07:30 final_location
1 つの更新アクションのみが履歴テーブルに保存されるように、コントローラーからこれをどのように実現できますか?
アップデート:
このトリガーを使用して出荷追跡ログを取得できました。vladr に感謝します
区切り記号 $$
ドロップトリガーshipment_after_update
$$
CREATE TRIGGER shipment_after_update
AFTER UPDATE on shipments
FOR EACH ROW BEGIN INSERT INTO cargo_transit_history ( shipment_id
, current_location
, final_location
, updated_at
) VALUES (NEW.id, NEW.current_location, NEW.final_location, NOW()); END$$
区切り文字;