2017-06-23 17 views
2

laravelを使用してブログを終了しましたが、コメント機能を追加したいのですが、このようなエラーはほとんどありません。誰でも助けてくれますか? 私の英語、英語は私の母国語ではない、 ありがとう:)Laravel未定義オフセットエラー

(1/1) ErrorException 
Undefined offset: 1 
ここ

は私AdminBlog.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'); 
    } 
} 

Comment.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'); 
    } 
} 

BlogController.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]); 
    } 
} 

show.blade.phpあなたが使用する必要があります

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

答えて

1

:あなたはcomment()を使用している、ということ

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

注意。また、hasMany関係には複数の名前を使用する必要があります。commentcommentsである必要があります。

また、あなたのショーの方法では、次のようなものを使用する必要があります試してみてください

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

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

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

または

$post->comment 

()との関係を呼び出して、次のクエリビルダーのインスタンスを返し、フィルタリングすることができます オブジェクト。 ()を使わずに電話を外すと、配列にアクセスできるコレクションが返されます。

コメントが多い場合は、複数の関係を複数指定する必要があります。この場合

:あなたはあなたのショーの機能に変更する必要が

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

    // Use it like this 
    $post->comments 
0

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

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

TO

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

はあなたのためにこの作品を願っています!

関連する問題