Table 使用 yajra/laravel-datatables 获取一篇文章的所有评论

Table Bring all comments for one article using yajra/laravel-datatables

当尝试获取 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

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

您正在尝试获取第一篇文章及其评论。

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);
}