2017-10-14 5 views
0

Laravelにテストケースを書き込もうとしています。私はhere 2つのモデル間の多対多の関係のためのダミーデータを作成する方法を発見しました。しかし、私はピボットテーブルに属性を追加する方法を見つけることができませんでした。ここでLaravelテスト:ピボットテーブルに属性を追加します。

例: 我々はモデルuserとモデルcarを持っています。各ユーザーは複数の自動車を運転することができ、各自動車は複数のユーザーによって運転することができ、各ユーザーが各自動車でどのくらいの車を運転したかを把握したい。

usersテーブル

id | name 
    1 | Bob 
    2 | Alice 

carsテーブル

id | name 
    1 | Red Car 
    2 | Blue Car 

car2user関係テーブル

id_user | id_car | miles 
    1  | 1  | 20 
    2  | 2  | 4 

どのように私は、このようなテストケースを作成することができますか?私は

$user = factory(\App\User::class)->create(['name' => 'Bob'])->first(); 

$user->cars()->save(factory(\App\Car::class)->create(['name' => 'Red Car'])); 

を試してみました。しかし、これはエラーを発生させます:

General error: 1364 Field 'miles' doesn't have a default value

私はどこにも必須フィールドmilesの値を指定しなかったので、私は、このエラーメッセージを受け入れます。しかし、私はその価値をどこで提供することができますか?

答えて

1

save()メソッドに追加のピボット属性を2番目の引数として渡すことができます。以下はそのトリックを行う必要があります:

$user->cars()->save(factory(\App\Car::class)->create(['name' => 'Red Car']), ['miles' => 20]); 
+0

ああ今私は理解する! saveメソッドは、 'cars()'の関係で呼び出すので、私のEloquentクエリに使用するのと同じです!私はsaveメソッドがPHPUnitの特別なものだと思っていました。この全体の呼び出しは私にとってはブラックボックスでした。唯一の違いは、偽のモデルでEloquentメソッドを呼び出すことです。これはとても素敵です!ありがとうございました! – Adam

関連する問題