2016-09-12 9 views
0

私はプライマリキーOrderGuidで注文テーブルを持っています。これは、システムの多くの部分で順序を追跡するために使用される32ビットの一意の識別子です。Laravel/MySQL:StoreGuidに基づいてStoreOrderNumberをインクリメント

残念ながら、データが一見素敵ではないので、StoreOrderNumberフィールドが必要と判断されています。これは、orders表内の各StoreGuidの固有の整数になります。また、自動増分などが必要です。 StoreGuidのテーブルに追加された最初の注文はStoreOrderNumberに1、次の2は3などとなります。ある特定のStoreGuidの注文はすべてStoreOrderNumberの同じ番号付け、すなわち1から2,3 、4 ...

私は、LaravelとMySQLでこれをどうやって行うのかについて完全に空白を描きました。テーブルのフィールドに追加できる増分オプションがありますが、これは特定のStoreGuidの新しい注文ごとに増分するだけでよいことを考慮していません。

+-----------+-----------+------------------+ 
| OrderGuid | StoreGuid | StoreOrderNumber | 
+-----------+-----------+------------------+ 
| aaa111 | abc123 |    1 | 
| bbb222 | abc123 |    2 | 
| ccc333 | xyz789 |    1 | 
| ddd444 | xyz789 |    2 | 
| eee555 | abc123 |    3 | 
| fff666 | xyz789 |    3 | 
+-----------+-----------+------------------+ 
+0

私はあなたの問題をはっきりと理解していませんが、laravelのミューテータが問題を解決できると思う:https://laravel.com/docs/5.3/eloquent-mutators#defining-a-mutator指定されたモデル要素(列)指定された条件に最大値を選択し、この要素に値+ 1を設定します。 – Mishek

+0

テーブルの例を追加 –

答えて

1

これは、MySQL TRIGGERで行うことができます。

このような何か(テストされていないが、全体のアイデアを得る):

CREATE TRIGGER SetStoreOrderNumber BEFORE INSERT ON Orders 
FOR EACH ROW BEGIN 
    SET NEW.StoreOrderNumber = (
     SELECT (COALESCE(MAX(StoreOrderNumber), 0) + 1 
     FROM Orders 
     WHERE Orders.StoreGuid = NEW.StoreGuid 
    ); 
END 

MAX(StoreOrderNumber)NULLになりますのでCOALESCEは、新しい店舗で最初の注文を作成できるようにする必要があります。

+0

ああ!トリガー!私は今それらを覚えています。それを行ってあなたに知らせるでしょう。ありがとう。 –

関連する問題