【问题标题】:How to rewrite SQL query in Laravel?如何在 Laravel 中重写 SQL 查询?
【发布时间】:2017-02-25 17:04:25
【问题描述】:

我使用以下查询生成器:

$res = Announcement::whereExists(function ($query) {
                $query->select(DB::raw(1))
                    ->from('announcement_category')
                    ->join('user_category', 'user_category.category_id', '=', 'announcement_category.category_id')
                    ->where('user_category.user_id', 1)
                    ->where('announcement_category.announcement_id', '=', 'announcements.id')
                    ->whereNull('deleted_at');
            })->get();

如何使用短格式 with 重写此查询:

Announcement::with("announcement_category")...

因为,在这个查询中,构建器最后添加了条件和where delete_at NOT null,它会出错。

表之间的关系:

Announcement           Announcement_category          User_category
_____________          ____________________________   _______________
id | name             announcement_id | category_id   user_id | category_id

1) Announcement 可以有一个或多个类别(Announcement has many Announcement_category)

2) 用户可以有一个或多个类别

3) User_category 通过category_id = category_idAnnouncement_category 相关

【问题讨论】:

  • 你能显示你在AnnouncementAnnouncementCategoryUser之间建立的关系吗?
  • 是的,看看更新的问题
  • 1) delete_at 属于哪个表? 2) 如果您使用 SoftDeletes,不应该是 deleted_at 吗? 3)您是否在模型中设置了关系,例如AnnouncementbelongsToMany CategoryCategorybelongsToMany User?
  • deleted_at 仅在Announcement 表中,如果不删除则为NULL。我在模型中没有关系,因为我不知道AnnouncementCategoryUserCategory 之间的关系类型。不,公告可以有很多类别,它与用户没有关系。用户只与UserCategoryby field: user.id = user_category.user_id有关系

标签: laravel laravel-5.4


【解决方案1】:

你应该先定义 Announcement 和 AnnouncementCategory 之间的关系

public function announcement_category() {
 return $this->hasMany(AnnouncementCategory::class, 'announcement_id')
}

然后,随时为关系添加条件,甚至在关系函数中设置它。

【讨论】:

  • 你如何使用这个(调用)?你能分享完整的例子吗?
  • 喜欢这个? Announcement::with("announcement_category")->where("user_id", 1)
猜你喜欢
  • 2016-04-01
  • 2016-03-24
  • 2019-08-27
  • 1970-01-01
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 2016-12-26
相关资源
最近更新 更多