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

Laravel 5/Elount-查询过滤属于多个关系

穆承运
2023-03-14

假设我的数据库中有以下关系:

产品

ID|名称

类别

ID|名称

产品类别

id |产品|类别| id

我可以很容易地使用Elount的模型,使用“归属”关系来构建它:产品有一个“类别”公共功能,称为“类别”,类别有一个“产品”公共功能。

现在,我有一个页面,用户希望通过单击类别名称来过滤给定类别的所有产品。

程序将把类别id传递给我的控制器,现在开始解决问题。

我可以很容易地做到"手工"编写此代码:

            $products = Product::query()
            ->leftJoin('product_category', 'product.id', '=', 'product_category.product_id')
            ->leftJoin('category', 'product_category.category_id', '=', 'category.id')
            ->where('category_id', '=', 2);

但这将使在模型类中定义关系的过程几乎毫无用处。

有没有更好的方法来制作它,也许用ORM的东西?

非常感谢你!

共有1个答案

慎峻
2023-03-14

使用whereHas:

$products = Product::whereHas('categories', function ($q) {
    $q->where('id', request()->input('category_id'));
})->get();

请参阅查询关系存在。

 类似资料:
  • 问题内容: 我目前正在开发第一个Loopbackjs项目,并且面临着一个看似简单的问题:假设我有一个模型“ Post”和一个模型“ Tag”。帖子具有且属于许多标签。 现在,我需要列出所有带有特定标签的帖子。我只是想不通如何使用Loopback创建查询来实现此目的。我以为它会像这样工作,但不会: 我将不胜感激任何帮助。 问题答案: 对某些相关属性进行过滤并不像应该那么容易。有一个未完成的拉取请求,

  • 我的情况: 我有django模型主机和模型包(名称和版本),其中有FK主机模型。现在我需要过滤所有主机,其中有包的特定名称和特定版本…因此,类似这样的操作非常简单,但是我需要对几个包重复这个操作,这样我就可以得到一个版本中包含每个希望的包的主机。 我尝试了两个方法,但都失败了,第一个是在for循环中应用filter,它很丑,但很有效,尽管我很高兴,我发现这不是一个稳定的解决方案,我接下来应用的一些

  • 使用Jackson过滤掉属性非常简单: 我正在尝试将其集成到我的Jersey REST应用程序中。API用户可以通过提供查询字符串来过滤属性: 在泽西岛最优雅的方式是什么?我可以很容易地在我的资源方法中执行上述操作,但这不知何故破坏了Jersey的优雅。此外,我认为为每个请求创建一个新的ObjectMapper会导致性能下降。 我可以编写一个MessageBodyWriter,它从UriInfo上

  • 我有一个使用Postgre 9.3和JPA2.1(Hibernate实现)的Spring MVC应用程序。我有一个类'电影',其中有一组评论。我想写一个JPA NamedQuery,它返回我所有的电影细节,但只有批准的评论。评论可以有其他状态,但我想只显示批准的评论。 我的班级如下所示: 我写的查询不会过滤评论并返回包含所有评论的电影;它的工作原理与上面显示的findMovieById查询相同。

  • 问题内容: 我有一个带有许多字段的表。我正在尝试在asp.net中创建搜索过滤器,以便用户可以按一个或多个字段进行搜索。所以基本上我想创建一个包含4个参数的存储过程,如果它不为null,它将把参数附加到WHERE子句中。 TableExample有4列,Col1 Col2 Col3 Col4 我希望有一种方法可以用一个存储过程完成此操作,而不必为每种可能的组合创建一个。 我正在尝试类似的方法,虽然

  • 问题内容: “过滤后的查询和过滤器”与“根查询和过滤器”之间有什么区别吗?例如 情况1: 情况2: 我在http://elasticsearch-users.115913.n3.nabble.com/Filtered-query-vs-using- filter-outside-td3960119.html中 找到了此讨论,但所引用的URL是404,并且解释过于简洁我。 请示教或提供指出这些区别的

  • 我有以下疑问: 正如预期的那样,我得到了以下结果: 有没有办法将上述结果复制到另一个表中,使我的表看起来像这样? 我的问题是,可以预期任何数量的行,因此我不确定如何迭代未知数量的行。

  • 编辑: 我正在使用热切加载,我认为这将影响它的工作方式。