热烈的加载评论与laravel中的帖子,如何设置数据库和模型?

时间:2016-05-17 16:53:07

标签: laravel post comments blogs

所以,我检查了一个教程,找到一个简单的博客,该博客具有在帖子上发表评论的功能。 我已经完成了我的帖子迁移,我想在帖子中添加评论。 这些帖子有一个项目和描述的图片。 所以我的迁移是:

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts' ,function(Blueprint $table){

            $table->increments('id')->unsigned()->unique();
            $table->unsignedInteger('user_id')->unsigned();
            $table->unsignedInteger('item_id')->unsigned();
            $table->string('picture', 255)->nullable();
            $table->text('description')->nullable();

            $table->foreign('user_id')
                ->references('id')
                ->on('users')
                ->onDelete('cascade');


            $table->foreign('item_id')
                ->references('id')
                ->on('items')
                ->onDelete('cascade');


            $table->timestamps();
        });

    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('posts');
    }
}

所以我有一个包含帖子ID的表格,海报的user_id,张贴图片的项目的item_id,图片和描述。

现在我想,好吧我必须在这些帖子中添加评论,所以我需要一个评论表,我做了一个这样的:

class CreateCommentsTable extends Migration {
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('comments', function(Blueprint $table)
        {
            $table->increments('id');
            $table -> integer('post_id')->unsigned()->default(0);
            $table->foreign('post_id')
                ->references('id')->on('posts')
                ->onDelete('cascade');
            $table -> integer('user_id')->unsigned()->default(0);
            $table->foreign('user_id')
                ->references('id')->on('users')
                ->onDelete('cascade');
            $table->text('body');
            $table->timestamps();
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        // drop comment
        Schema::drop('comments');
    }
}

我有评论的id,评论引用的帖子的post_id,以及评论者和评论团体的user_id。

这应该是一对多的关系问题吧?帖子可以有很多评论。

所以模型是:

class Comment extends Model
{

    /**
     *
     * The comment belongs to one author
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function author()
    {
        return $this->belongsTo('App\User');
    }

    /**
     *
     * The comment belongs to one post
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function post()
    {
        return $this->belongsTo('App\Post');
    }

}

...

class Post extends Model
{

    /**
     *
     * a post has many comments
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function comments()
    {
        return $this->hasMany('App\Comments');
    }

    /**
     *
     * a post belongs to one author
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function author()
    {
        return $this->belongsTo('App\User');
    }

}

...

class User extends Model
{

  //..... (some more stuff here not related to comments.

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

现在重点是,如果我想返回所有用户帖子的评论和评论作者,我应该如何修改模型?

2 个答案:

答案 0 :(得分:0)

你可以做点什么

$posts_with_comments = Post::with('author', 'comments')->get();

您可以根据需要添加任意数量的关系,查看热切的文档

https://laravel.com/docs/4.2/eloquent#eager-loading

答案 1 :(得分:0)

试试这个

$user = Auth::user(); $posts = Post::with('comments', 'author')->where('user_id', $user->id )->get();

您在“where”

中使用的是用户对象而不是用户ID