0

私のコードをlaravel関係で更新するのに苦労しています。

私は2つのテーブルを持っています。Customer および Reservations with Customer は、Reservation と hasMany 関係を持ち、Reservation は Customer との属している関係を持ちます。

また、予約テーブルは、リンク テーブルを介して製品テーブルと多対多の関係を持ちます。

顧客レコードを正常に取得したので、顧客の予約を作成する必要があります。

プロセスは、予約オブジェクトを作成し、予約を顧客に添付してから、製品にリンクすると想定しています。(予約テーブルにはいくつかの関係がありますが、今のところこれを機能させます)

このコードを試すと、エラーが発生Field 'customer_id' doesn't have a default valueします。データベース テーブルでは null が許可されており、検証ルールが設定されていないため、これは設定した関係に関係していると想定します。

`$reservation = new Reservation;

        $reservation->play_date=$play_date->format('Y-m-d');
        $reservation->booked_date=$booked_date->format('Y-m-d');
        $reservation->am_tee=$am_time->format('H:i:s');
        $reservation->pm_tee=$pm_time->format('H:i:s');
        $reservation->save();

        $customer->reservation()->associate($reservation);`

エラーが発生します$reservation->save();

次に、作成した $reservation を使用して製品リンク テーブルにエントリを作成する必要があるため、新しく作成した予約と製品との関係にアクセスできるようにする必要があります。

を使用してエントリを作成できます$customer->reservation()->save($reservation);が、操作する $reservation オブジェクトがないようです (またはそうですか?)

私は関係に非常に混乱しているので、これを機能させる方法を理解するためのすべての助けに感謝しています

ありがとう

モデルでの私の関係は次のとおりです。

    Customer Class:

        public function reservation() {
                return $this->hasMany('Reservation');
            }

Reservation Class:

public function customer() {
        return $this->belongsTo('Customer');
    }

動作しているように見える唯一の方法$customer->reservation()->save($reservation);は、これが正しい方法であり、コードを作り直す必要があると思います。associate()

更新: mysql でテーブルを再作成しました。元の予約レコードを期待どおりに保存し、次を使用して顧客レコードに関連付けることができるようになりました。

$reservation->customer()->associate($customer)

これは私と一緒に沈むのに時間がかかります!

4

1 に答える 1

3

パート1

顧客には多くの予約があるため、予約を追加する前に顧客 ID が必要です。

あなたのコードで、

最初に予約を所有する顧客を取得する必要があります

$customer = Customer::find($id);

今、

$reservation = new Reservation;

$reservation->customer_id = $customer->id;    
$reservation->play_date=$play_date->format('Y-m-d');
$reservation->booked_date=$booked_date->format('Y-m-d');
$reservation->am_tee=$am_time->format('H:i:s');
$reservation->pm_tee=$pm_time->format('H:i:s');
$reservation->save();

これで、$reservation->save();は成功するはずです。

パート2

あなたの質問について:

「$customer->reservation()->save($reservation) を使用してエントリを作成できます。しかし、操作する $reservation オブジェクトがないようです (または私は?)」

を使用して、顧客のすべての予約を取得できます

$reservations = $customer->reservation->get(); 
//where customer is the one you had on Customer::find($id);

その後、予約を 1 つずつループできます。(ただし、予約IDが必要になると思うので、上記の最初のアプローチの方が優れています)

于 2013-09-17T21:08:38.983 に答える