【问题标题】:Laravel Test: Add attribute to pivot tableLaravel 测试:将属性添加到数据透视表
【发布时间】:2017-10-14 22:59:56
【问题描述】:

我正在尝试在 Laravel 中编写一个测试用例。我发现here 如何为两个模型之间的多对多关系创建虚拟数据。但我找不到如何向数据透视表添加属性。

这里是一个例子: 我们有一个模型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']));

但这会引发错误:

一般错误:1364 字段“英里”没有默认值

我接受此错误消息,因为我没有在任何地方指定必填字段 miles 的值。但是我在哪里可以提供这个价值呢?

【问题讨论】:

    标签: php mysql laravel laravel-5 eloquent


    【解决方案1】:

    您可以将额外的枢轴属性作为第二个参数传递给 save() 方法。以下应该可以解决问题:

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

    【讨论】:

    • 哦,现在我明白了! save 方法与我用于 Eloquent 查询的方法相同,因为我在关系 cars()! 上调用它!我认为 save 方法对 PHPUnit 来说很特别,整个调用对我来说是一个黑匣子。唯一的区别是我用假模型调用 Eloquent 方法。这太好了!谢谢!
    猜你喜欢
    • 2019-06-12
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多