当前位置: 首页 > 知识库问答 >
问题:

Laravel-条件连接可以通过雄辩的关系实现吗?

徐君植
2023-03-14

如何用雄辩的关系实现以下目标?帖子可以由多个用户加书签,每个用户只能给任何给定的帖子加一次书签(如果删除书签,记录将被删除)。我想检索所有的帖子与指标是否当前登录的用户有书签他们。

SELECT p.*, NOT(ISNULL(b.PostId)) Bookmarked
FROM Post p
LEFT JOIN (
    SELECT PostId FROM Bookmark WHERE UserId = {{ Auth::id() }}
) b
ON p.PostId = b.PostId

共有2个答案

寇靖
2023-03-14

您可以使用with count()

$posts = Post::withCount(['bookmarks as bookmarked', function($query) {
    $query->where('UserId', Auth::id());
}])->get();

这需要一个书签关系:

  • 用户表的关系

逑翰翮
2023-03-14

我认为一个好的解决方案是创建一个数据透视表,类似这样:

Schema::create('users', function (Blueprint $table) {
    // Your users table
});

Schema::create('posts', function (Blueprint $table) {
    // Your posts table
});

Schema::create('post_user', function (Blueprint $table) {
    $table->integer('post_id')->unsigned();
    $table->integer('user_id')->unsigned();
});

比在你的Post模型中定义一个多对多关系:

public function bookmarkUsers() {
    return $this->belongsToMany('Your\User\Model');
}

而且比在您的控制器中,您可以检索用户的书签帖子:

//  [other stuff]
$posts = Post::whereHas('bookmarkedUsers', function($query) {
    $query->where('id', '=', Auth::id());
})->get();
 类似资料:
  • 我有以下三个表格: 所以基本上这种关系就像: 用户有许多项目 项目属性到客户端 我的问题是: 如何使用eloquent获得用户的所有客户端? 似乎我不能用户hasManyPass方法,因为在客户端表中没有project_id。 因此,我希望达到的目标是:

  • 我有三种模式——博客、帖子、评论。博客有很多帖子,帖子有很多评论 当我写作时 它会给所有的博客发帖子和评论。但我将如何获得那些由管理员用户创建的博客,即评论表中的用户id。在哪里写入

  • 我是Laravel5.2的新手,正在开发一个遗留系统,对雄辩有点困惑,希望有人能给我代码。 共有3个表格: 卡片类别卡片2类 卡片可以是许多类别的一部分,这些类别保存在cards2cat表中。 cards2cat表的结构如下 id(主键)图像(卡)类别 我想做的是在Cards模型中有一个方法,名为getCardsWithCategors,它返回Cards信息和category表中类别的名称。 ca

  • 我正在编写php代码,对于当前的项目,我正在使用laravel框架(带有雄辩的ORM)。在这个项目中,我创建了两个表:用户和任务。我想在这些表之间创建一个“一对多”的关系。因此,一个用户可以有许多任务。在Tasks类中,我创建了方法所有者(): 但是当我以前得到用户名的时候 我得到这个异常:未定义的属性:illumb\Database\Eloquent\Relations\BelongsTo::$

  • 我试着补充: 并用调用,但响应为空。

  • 我刚刚开始学习LaravelV3,我试图通过创建一个博客来了解eloquent的一对多关系。我的帖子与类别有多对一的关系(每个帖子都链接到一个类别)。 我有以下表格和以下字段: 帖子:id、标题、正文、创建日期、类别id 类别:id、名称 我有以下两种型号: 我想出了如何通过传递类别id来获得所有帖子: 我只是需要帮助,找出如何获得所有的职位,并得到他们的更正类别。因此,在视图中的一天结束时,我可