php - 记录保存到laravel中的数据透视表的测试失败
问题描述
我有一个板模型和一个引脚模型,它们是多对多的。我正在测试以确保当创建一个引脚并分配一个板时,它会保存到数据透视表中。由于我是测试新手,因此我无法弄清楚这一点。
这是我的测试:
/** @test */
public function a_pin_can_belong_to_a_board()
{
$board = create('App\Board');
$pin = make('App\Pin');
$response = $this->post('/pins/create', $pin->toArray());
$pin->boards()->sync($board);
$this->assertDatabaseHas('board_pin', [
'board_id' => $board->id,
'pin_id' => $pin->id
]);
}
这是我的错误:
1) Tests\Unit\PinTest::a_pin_can_belong_to_a_board
Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity
constraint violation: 19 NOT NULL constraint failed: board_pin.pin_id
(SQL: insert into "board_pin" ("board_id", "pin_id") values (1, ))
Caused by
PDOException: SQLSTATE[23000]: Integrity constraint violation: 19 NOT
NULL constraint failed: board_pin.pin_id
这是我的控制器:
public function store(Request $request)
{
$this->validate($request, [
'title' => 'required|max:200',
'link' => 'required|max:255'
]);
$pin = new Pin();
$pin->title = $request->title;
$pin->link = $request->link;
$pin->user_id = auth()->id();
$pin->save();
$pin->boards()->sync($request->boards);
return redirect("/pins/{$pin->id}");
}
任何帮助将不胜感激!谢谢!
解决方案
这是答案!我不只是在 pin 实例上使用 make 方法,而是使用 create 方法并将其持久化到数据库中,然后删除了 post 操作。见下文:
/** @test */
public function a_pin_can_belong_to_a_board()
{
$board = create('App\Board');
$pin = create('App\Pin');
$pin->boards()->sync($board);
$this->assertDatabaseHas('board_pin', [
'board_id' => $board->id,
'pin_id' => $pin->id
]);
}
推荐阅读
- python - 服务器启动并运行时通过 pysm 访问未知 SMB 服务器时出现问题
- c# - 无法在 web api post 上绑定模型
- oracle - 如何在 oracle apex 中创建一个弹出的值列表来验证登录用户?
- beautifulsoup - select.one 在 bs4 中没有给出想要的输出
- jenkins - 用声纳设置詹金斯时出错
- sql - SQL 查询在同一查询中查找值、日期和公司之间的最小值和最大值
- python - 合并两个排序的链表 - Python 实现 - 错误/不完整的输出
- pygame - 无法在pycharm中安装pygame
- matrix - Z = -1 处图像平面的逆相机内在矩阵
- c - createIndexes 中的错误:无法使用数据库“mydb”发送“createIndexes”命令:无法读取 4 个字节:套接字错误或超时