2017-10-14 32 views
0

我试图写在Laravel测试用例。我发现here如何创建一个虚拟的许多数据,两款车型之间的许多关系。但我找不到如何将数据添加到数据透视表。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

可以传递额外枢轴属性作为第二个参数节省()方法。下面应该做的伎俩:

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

哦,现在我明白了! save方法与我用于我的雄辩查询的方法相同,因为我在关系'cars()'上调用它。我想保存方法是使用PHPUnit很特别,这整个电话是我的一个黑匣子..唯一的区别是,我称之为有假货示范雄辩的方法。这太好了!谢谢! – Adam