[英]Illuminate \ Database \ Eloquent \ ModelNotFoundException - No query results for model In laravel
[英]Laravel ModelNotFoundException: No query results for model []
运行测试时出现此错误:
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');
});
如果有人对如何提供帮助有任何想法,将不胜感激,谢谢!
PS如果我需要包含任何其他内容,请告诉我谢谢!
查询构建器的 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')
]);
异常告诉您没有与条件匹配的Content
对象。 从 文档:
未找到异常
有时,如果找不到模型,您可能希望抛出异常。 这在路由或控制器中特别有用。
findOrFail
和firstOrFail
方法将检索查询的第一个结果; 但是,如果未找到结果,则会抛出Illuminate\\Database\\Eloquent\\ModelNotFoundException
。
查看您的where
条件:
$topbar = Content::where('slug', 'topbar')->firstOrFail();
确保您的contents
(?) 表中有slug=topbar
(请记住这是区分大小写的)。 您在其中一条评论中说您确定,因此请使用Tinker在Artisan Console 中检查它:
$ php artisan tinker
> Content::where('slug','topbar')->count();
这应该输出:
[!] 在此 Tinker 会话中将“Usage”别名为“App\\Content”。
=> 1 // 或者更多..
要获取您的记录,您可以尝试这样做(在您的控制器中):
$topbar = Content::where('slug', 'LIKE', '%topbar%')->firstOrFail();
此外,您的句子很可能只是您当前代码的一个示例,但如果不是,请确保在您的 where 子句中传递实际值:
$topbar = Content::where('slug', 'LIKE', request('slug'))->firstOrFail();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.