为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕桂英3389331 2021-05-04 10:22:03
运行测试时出现此错误: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');});如果有人对如何帮助有任何想法,将不胜感激,谢谢!附注:如果需要添加其他任何内容,请告诉我,谢谢!
查看完整描述

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

异常告诉您没有Content与条件匹配的对象。从文档

找不到例外

有时,如果找不到模型,您可能希望抛出异常。这在路由或控制器中特别有用。该findOrFail 和firstOrFail方法将检索查询的第一个结果; 但是,如果未找到结果, Illuminate\Database\Eloquent\ModelNotFoundException将抛出a。

检查您的where状况:

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

确保您在contents(?)表中有一条记录slug=topbar(请记住,这是区分大小写的)。您在评论之一中说您确定,因此请使用TinkerArtisan 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();


查看完整回答
反对 回复 2021-05-21
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

查询构建器的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')

]);


查看完整回答
反对 回复 2021-05-21
  • 2 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信