这是我遇到的问题: 我的代码设置为每当更新Model X的标题时都应更改Model Y的计数。
所以我要做的是,我发送将触发上述事件的请求,但是每当我检查是否在数据库中进行了更改时,都不会触发。
我已经在X Observers更新函数中尝试了dd(),并正确触发了它。
有什么想法吗?
编辑:我正在使用assertDatabaseHas()
进行测试Edit2:这是我的测试代码
public function testBasicTest()
{
$user = factory(User::class)->create();
$book = Book::create([
'user_id' => $user->id,
'name' => 'test'
]);
$response = $this->getJson('/api/books-update?book_id=' . $book->id);
$response->assertStatus(200);
dd($response->getContent(), DB::table('books')->where('name', '=', 'JAJCA')->get());
}
这是我的控制器:
public function testEndpoint(Request $request)
{
$book_id = $request->get('book_id');
$book = Book::find($book_id);
$book->update([
'name' => 2
]);
return response()->json($book, 200);
}
这是BookObserver @ updated
public function updated(Book $book)
{
$book->name = 'JAJCA';
}
TestBasicTest的getContent的最后一行打印出来:
name => JAJCA
对于DB::table('books')->where('name', '=', 'JAJCA')->get()
,返回空数组。
答案 0 :(得分:1)
更新后的触发器将被保存。如果要通过事件更改输入,则还必须使用“更新和创建”。
所以要么像这样使用Updating,保存将在此事件之后发生,并且已经进行了更新。
public function updating(Book $book)
{
$book->name = 'JAJCA';
}
为什么您的回答是正确的而数据库不是,模型是引用,所以您在更新对象但不保存它。