Laravel ModelNotFoundException:没有关于模型[]的查询结果

运行测试时出现此错误:


ModelNotFoundException:没有针对模型[App \ Content]的查询结果


这是我的测试:


/** @test */

public function it_loads_homepage()

{

    $this->withoutExceptionHandling();

    $response = $this->get('/');


    $response->assertStatus(200);

}

这是我的控制器:


public function home()

{

    $topbar = Content::where('slug', 'topbar')->firstOrFail();


    return view('welcome')->with([

        'logo' => Arr::get($topbar->content, 'logo', asset('images/logo.png')),

        'quote' => Arr::get($topbar->content, 'quote'),

        'quote_author' => Arr::get($topbar->content, 'quote_author')

    ]);

}

这是我的路线文件:


Route::get('/', 'PageController@home');


Route::post('/admin/content', 'ContentsController@store');


Auth::routes();


Route::get('/home', 'HomeController@index')->name('home');


Route::middleware('auth')->prefix('admin')->group(function () {

    Route::get('/dashboard', 'DashboardsController@index');

    Route::patch('/contents/{content}', 'ContentsController@update');

});

如果有人对如何帮助有任何想法,将不胜感激,谢谢!


附注:如果需要添加其他任何内容,请告诉我,谢谢!


慕桂英3389331
浏览 168回答 2
2回答

暮色呼如

异常告诉您没有Content与条件匹配的对象。从文档:找不到例外有时,如果找不到模型,您可能希望抛出异常。这在路由或控制器中特别有用。该findOrFail 和firstOrFail方法将检索查询的第一个结果; 但是,如果未找到结果, Illuminate\Database\Eloquent\ModelNotFoundException将抛出a。检查您的where状况:$topbar = Content::where('slug', 'topbar')->firstOrFail();确保您在contents(?)表中有一条记录slug=topbar(请记住,这是区分大小写的)。您在评论之一中说您确定,因此请使用Tinker在Artisan Console中进行检查:$ php artisan tinker> Content::where('slug','topbar')- >count();这应该输出:[!]在此Tinker会话中,将“用法”别名为“ App \ Content”。=> 1 //或更多。要获取记录,您可以尝试改用此方法(在您的控制器中):$topbar = Content::where('slug', 'LIKE', '%topbar%')->firstOrFail();同样,您的句子很可能只是您当前代码的示例,但如果不是,请确保在where子句中传递实际值:$topbar = Content::where('slug', 'LIKE', request('slug'))->firstOrFail();

汪汪一只猫

查询构建器的find()方法可以返回Model实例;如果在数据库中未找到任何记录,则返回null。因此,您必须通过首先检查用户是否存在来处理此问题。如果他这样做,则可以显示他的头像,否则,可以显示登录按钮。您的代码有点混乱,我建议您不要将逻辑与视图代码混在一起。您应该让用户进入控制器,然后再将其传递给查看者$topbar = Content::where('slug', 'topbar')->get()->toArray();return view('welcome')->with([    'logo' => Arr::get($topbar->content, 'logo', asset('images/logo.png')),    'quote' => Arr::get($topbar->content, 'quote'),    'quote_author' => Arr::get($topbar->content, 'quote_author')]);
打开App,查看更多内容
随时随地看视频慕课网APP