3

私はRORを初めて使用し、貨物追跡プロジェクトに取り組んでいます。アイデアは、ユーザーが追跡番号で貨物を追跡するときに、現在の場所と渡された場所の履歴が表示されるように、出荷場所へのすべての変更をログに記録することです。

shippings テーブルと shipping_locations テーブルがあります。

  1. 出荷

    +--------------------------+--------------+------+-----+---------+----------------+
    | 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    |                |
    +--------------------------+--------------+------+-----+---------+----------------+
    
  2. 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    |                |
    +------------------+--------------+------+-----+---------+----------------+
    
  3. 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_updateAFTER 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$$

区切り文字;

4

1 に答える 1