为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Laravel ORM Eloquent 上转换原始 sql 命令

如何在 Laravel ORM Eloquent 上转换原始 sql 命令

PHP
紫衣仙女 2022-01-08 20:26:21
我有 4 个表,1-> 用户,2-> 类别,3-> 评论,4-> 帖子我想获取用户已经评论过的相关帖子的类别SELECT kategoris.* FROM kategoris INNER JOIN yazis on yazis.kategori_id = kategoris.id INNER JOIN yorums on yorums.yazi_id = yazis.idINNER JOIN users on users.id = yorums.user_idwhere users.id = 1
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

根据模型的设置方式,这就是 Eloquent 的查询方式


$category = Post::whereHas('comments', function($query) {

            $query->where('user_id', auth()->user()->id);

        })->first()->category;

更新:

这就是您的模型和表迁移的外观

User有很多帖子和评论


public function posts()

{

    return $this->hasMany(Post::class);

}


public function comments()

{

    return $this->hasMany(Comment::class);

}

Category 有很多帖子


public function posts()

{

    return $this->hasMany(Post::class);

}

Post 属于一个类别和一个用户,有很多评论


public function category()

{

    return $this->belongsTo(Category::class);

}


public function comments()

{

    return $this->hasMany(Comment::class);

}


public function user()

{

    return $this->belongsTo(User::class);

}

Posts Table Migration


Schema::create('posts', function (Blueprint $table) {

    $table->bigIncrements('id');

    $table->unsignedBigInteger('user_id');

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

    $table->unsignedBigInteger('category_id');

    $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');

    $table->timestamps();

});

Comment 属于一个帖子和一个用户


public function post()

{

    return $this->belongsTo(Post::class);

}


public function user()

{

    return $this->belongsTo(User::class);

}

Comments Table Migration


Schema::create('comments', function (Blueprint $table) {

    $table->bigIncrements('id');

    $table->unsignedBigInteger('user_id');

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

    $table->unsignedBigInteger('post_id');

    $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');

    $table->timestamps();

});

让我们填充一些这样的数据......

Database Seeder


$user = factory(User::class)->create([]);

$category = Category::create([]);

$post = $user->posts()->create(['category_id' => $category->id]);

$post->comments()->create(['user_id' => $user->id]);

并通过上面的查询获取经过身份验证的用户评论过的帖子的类别......

希望这会有所帮助:)


查看完整回答
反对 回复 2022-01-08
  • 1 回答
  • 0 关注
  • 237 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号