Laravel未定义的偏移误差

时间:2017-06-23 13:54:43

标签: php laravel

我刚刚完成我的博客,使用laravel,我想在其上添加评论功能,但我收到的这样的错误很少,任何人都可以帮助我吗? 抱歉我的英语,英语不是我的母语, 谢谢:))

$posts = Country::get(2)->posts;

// with where:
$posts = Country::where('name', '=', 'USA')->get()->posts;

这是我的AdminBlog.php模型

(1/1) ErrorException
Undefined offset: 1

Comment.php模型

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class AdminBlog extends Model
{
    protected $table = 'admin';
    protected $fillable = ['title','text','images','slug'];

    public function comment(){
        return $this->hasMany('App\Comment');
    }
}

BlogController.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    protected $table = 'comment';
    protected $fillable = ['name','email','text','post_id'];

    public function post(){
        return $this->belongsTo('App\AdminBlog');
    }
}

show.blade.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\AdminBlog;
use App\Comment;

class BlogController extends Controller
{
    //Index
    public function index(){
        $post   = AdminBlog::all();
        return view('blog/index', compact('post'));
    }

    //Show
    public function show($id){
        $post       = AdminBlog::findOrFail($id);
        $comment    = Comment::all();
        //dd($comment);
        return view('blog/show', ['post'    => $post,
                                  'comment' => $comment]);
    }
}

3 个答案:

答案 0 :(得分:1)

您应该使用:

<div class="col-md-12 post-comment-show">
    @foreach($post->comment as $list)
        <p>{{ $list->text }}</p>
    @foreach
</div>

请注意,您已使用comment()。此外,您应为hasMany关系使用复数名称,因此comment应为comments

此外,在show方法中,您应该使用以下内容:

public function show($id)
{
    $post = AdminBlog::with('comment')->findOrFail($id);

    return view('blog/show', ['post' => $post]);
}

答案 1 :(得分:1)

尝试以下

$post->comment()->get()

$post->comment

当调用与()的关系时,它返回查询构建器的实例并允许您过滤该对象。如果在没有()的情况下删除它,则会返回一个可访问数组的集合

另一个建议是,如果你有很多评论,你应该将你的关系命名为复数。

在这种情况下:

  public function comments(){
      return $this->hasMany('App\Comment');
  }

  // Use it like this
  $post->comments

答案 2 :(得分:0)

您需要更改您的节目功能:

public function show($id){
  $post       = AdminBlog::findOrFail($id);
  $comment    = Comment::all();
  //dd($comment);
  return view('blog/show', ['post'    => $post,
                                  'comment' => $comment]);
}

public function show($id){
  $post = AdminBlog::with('comment')->where('admin.id',$id)->get();

  return view('blog/show', compact('post'));
}

希望这对你有用!