[英]Why doesn't laravel recognize my model?
我收到以下错误消息:“ [App \\ dummy]模型没有查询结果。” 我相信问题出在控制器上。 提交表单时,应该触发注释控制器中的功能。 这个控制器是新的,所以我相信这里有错误。 那是它停止工作的时候。 这是commentController文件:
<?php
namespace App\Http\Controllers;
use App\Dummy;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; //this one is for sql builders
use App\Comments;
use Illuminate\Http\RedirectResponse;
use DateTime; //to create a new date object you need to include this namespace
class commentController extends Controller
{
public function store(Dummy $post){
$date = new DateTime();
$timestamp = $date->getTimestamp();
$id = $post->id;
$post->addComment(request('body'));
return view('post', compact('post', 'timestamp', 'id'));
}
}
我尝试使App \\ Dummy小写,因此它是App \\ dummy,但仍然无法正常工作。 它仍然给我错误。
这是我的虚拟模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class dummy extends Model
{
protected $guarded = [];
public function comments(){
return $this->hasMany(Comments::class, 'post_id');
}
public function addComment($body){
$this->comments()->create(compact('body'));
}
}
您的错误是您的班级称为dummy
购买,您将其用作Dummy
,因此将其(文件和类)都重命名为Dummy
。
此类class dummy extends Model
到此类class Dummy extends Model
。
请记住,您的文件也应称为Dummy.php
,而不是dummy.php
将模型类名称更改为Dummy
,将文件名称更改为Dummy.php
。
这里的主要问题是路由模型绑定。 当您尝试添加注释时,不会根据您的路线来解析$post
对象。 您的路线设置不正确,或者试图在不存在的帖子中添加评论。
基本上,由于路由模型绑定会为您执行此代码,因此错误消息No query results for the model
。
$post = Dummy::findOrFail($id);
尝试改变这个
Route::post('post/{dummy}/comments', 'commentController@store');
public function store(Dummy $dummy)
问题出在形式上。 表单中的action属性是这样的:
<form class="col s12" action={{ url('/post/$id/comments') }} method="post">
我认为那会得到ID,因为我将ID压缩为变量$ id。 但是后来我检查了网址,发现不是一个数字,而是实际的单词$ id。 因此,这是解决方案:
<form class="col s12" action={{ url('/post/' . $post->id . '/comments') }} method="post">
只是为了让大家知道,当它说:“ [App \\ dummy]模型没有查询结果时。” 这意味着当我从具有以下代码行的虚拟模型中使用此方法时:
public function comments(){
return $this->hasMany(Comments::class, 'post_id');
}
它无法从虚拟表中找到主键。 因此无法与注释表中的post_id外键连接。 因此,它无法将新评论提交到该唯一博客文章的表中。 这是向表提交评论的最后一部分:
public function addComment($body, $name){
$this->comments()->create(compact('body', 'name'));
}
顺便说一句,comment()是我之前显示的创建方法。
结论
它几乎停止在web.php文件(路由文件)中工作,因为它没有获取ID。 由于我在前面解释过的形式在action属性中犯了错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.