繁体   English   中英

laravel为什么不识别我的模型?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM