1

当试图获得一篇文章的所有评论Article::first()first() 只带来我尝试使用的第一篇文章find()

$comments = Article::find()-> commentsArticle()->with('articles');
return Datatables::of($comments)

我收到错误,所以我如何传递一个值来查看一篇文章的所有评论,或者我有办法不使用find()

文章型号

class Article extends Model{

 public $table = 'articles';

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

 }

控制器

enter code here

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Yajra\Datatables\Datatables;

use App\Article;
use App\Comment;


class CommentController extends Controller{


   public function commentsForOne Article()
  {
    $comments = Article::all()->commentsArticle->with('articles');

            return Datatables::of($comments)->make(true);
  }

}

我得到的最后一个错误

ErrorException (E_DEPRECATED)
Non-static method Yajra\Datatables\Datatables::collection() should       
not be called statically

我希望找到任何类似的想法或例子可以帮助我学习

4

1 回答 1

1

您正在尝试获取带有评论的第一篇文章。

public function commentsForOneArticle($id)
{
    $article = Article::fine($id);

    //check if article exists to avoid errors
    if ( $article ) {
        return Datatables::of(Comment::where('article_id', $article->id))->make(true);
    }

    return "no article with id" . $id;
}

这只是一个例证。但似乎您需要先了解 Eloquent 的工作原理。观看这个免费的 Laracast https://laracasts.com/series/laravel-from-scratch-2017/episodes/7

对于路由,您可以像这样定义路由:

Route::get('comments/{article_id}', 'ArticleController@commentsForOneArticle');

并在 Ajax 中调用它

$.ajax({url: "/comments/1", 
    success: function(result){
        //do stuff here
    },
    error: function(error) {
        console.log(error)
    }
});

所有这些只是一个指南,而不是解决方案。

编辑

与用户一起获取数据

$article = Article::with('user')->find($id);
//will include all the fields from user and article

评论&作者 要获取评论作者的名字,需要在评论模型中定义关系

public function user() {
    return $this->belongsTo(User::class);
}

然后变成这样

if ( $article ) {
    return Datatables::of(Comment::with('users')->where('article_id', $article->id))->make(true);
}
于 2017-03-07T00:19:53.283 回答