【问题标题】:Laravel Eloquent ORM: Select from two tables without using find() possible?Laravel Eloquent ORM:从两个表中选择而不使用 find() 可能吗?
【发布时间】:2020-07-17 14:16:18
【问题描述】:

考虑到一对多的关系,基本上我想在 mysql 中的两个表上运行一个非常简单的数据库选择查询。

类别:此表包含所有产品类别。 主键是“id”。它有一列“url”,其中包含如何访问此类别的字符串,例如“贺卡”。

产品:此表包含所有产品,而每个产品都有一个类别 ID。 主键为“id”。其中有一列“category_id”代表产品对应的分类id。

所以,根据 Eloquent ORM 的文档,我是这样做的:

$products = \App\Category::find($CATEGORY_ID)->products);

而且它的作用就像一个魅力。

现在的问题是: 访问网页时,URL 不是这样的:

www.domain.tld/categories/123

但是,由于 SEO,它看起来像这样:

www.domain.tld/categories/greeting-cards

因此,我这样修改了数据库查询:

$products = \App\Category::where('url', $category)->products);

但这不起作用! 我是否正确地看到我 必须 使用 find() 并在这里放置 where() 方法是错误的?在 Eloquent 中还有其他方法可以做到这一点吗?我不喜欢使用第二个数据库查询来获取相应类别 url 的 ID,然后将此 id 粘贴到数据库查询中......我知道这是可能的,但我认为应该有更优雅的方法口才好?

非常感谢!

【问题讨论】:

  • $products = \App\Category::where('url', $category)->first()->products;

标签: php mysql database laravel eloquent


【解决方案1】:

您必须检索模型才能使用它的关系。

如果您想使用where(),只需致电first()

例子:

\App\Category::where('url', $category)->first()->products

更多方法可以在 Laravel 的文档中找到:Retrieveing single models

【讨论】:

  • 请记住,如果没有匹配项,Category::where('url', $category)->first() 的结果可能为 null,这将导致尝试访问非对象的属性时出错。
  • 谢谢你们的帮助!这就是诀窍!顺便说一句,只是出于兴趣:运行\App\Category::where('url', $category)->first()->products? 时,SQL 查询会是什么样子?这是一个查询(使用WHERE table_a.id = table_b.id)还是总共两个?
猜你喜欢
  • 2020-11-08
  • 2015-03-23
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
  • 2021-09-01
相关资源
最近更新 更多