Laravel软件包绑定的奇怪行为-存在模型并设置绑定时出现ModelNotFoundException

问题描述

我最近开始在Laravel PHPunit中测试用于图书管理的新api,但是当我想使用已创建图书的id更新图书时,

        $this->actingAs($user = factory(User::class)->create(),'api');
        $user->givePermissionTo('manage books');
        $this->postJson('api/v1/books',$this->validData());
        $book = Book::first();


        $response = $this->putJson('api/v1/books/1',$this->validData())

我收到此错误

No query results for model [Custom\Book\Models\Book] 1,abcde,9788055646916,255,long_description,short_description,2020-11-11T22:46:00.000000Z,2020-11-11T22:46:00.000000Z

当我把不存在的模型的ID放到那里时,我得到了一些不同的消息

No query results for model [Custom\Book\Models\Book] 2

主要我不理解,为什么当我仅插入id时,它试图绑定整个对象。

用于书本管理的模型,控制器和路由位于自定义程序包中,并且路由具有api中间件设置。

我的控制器方法

public function update(UpdateBookFormRequest $request,Book $book)
    {
        dump('kniha');
        dd($book);
        return (new BookService())->update($book,$request->validated());
    }

我的路线

Route::resource('books',BookController::class)->only('store','update','destroy')->middleware('can:manage books');

我的路线服务提供商:

public function registerRoutes(Router $router)
    {
        $router->group(['namespace' => $this->namespace,'prefix' => 'api','middleware' => 'api'],function ($router) {
            require  __DIR__ . '/../routes.PHP';
        });
    }

更让人奇怪的是,当我调用show方法

$this->getJson('api/v1/books/1');

I am able to bind Book model.

对不起,我的英语。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)