首页 > 解决方案 > 在 Laravel 中使用 sql 'like' 语句而不是多对一关系

问题描述

我是 Laravel 的初学者,通常是关系表,我不确定是否使用 Laravel 关系。想象一下,我们有一个包含汽车的表。每辆车都有一个原产国。我认为我可以在每条记录(汽车)中插入国家名称,也可以为国家/地区创建另一个表,并在 Laravel 中建立多对一关系,并为表中的每辆汽车设置一个国家/地区。第一选择有什么问题?

我在想第二个可能是按国家搜索投掷汽车的更好方法,但我们可以使用 SQL 中的“like”语句来做到这一点。

标签: phpsqllaravelormrelational-database

解决方案


因为我不使用 Laravel,所以我作为一个 sql 问题回答。

你需要两张桌子:汽车和国家。如果您在汽车表上插入国家/地区名称,则名称重复,如果出现拼写错误,您必须更新拼写错误的国家/地区记录和所有具有相同错误的汽车记录。此外,如果您删除一个国家/地区,您最终可能会出现不一致:删除的国家/地区可能会保留在 car table 上。

您可以在对两个表进行连接后使用 like 语句:

SELECT cars.*, country.name
FROM cars, country
WHERE cars.id_country = country.id
AND country.name LIKE 'A%'

(您会找到以“A”开头的所有国家/地区)。

我将这两个表想象为:

  • 汽车(..., int id_country, ...) <- 这里没有国家名称!
  • 国家(计数器 id,varchar(64) 名称,...)

其中cars.id_country 引用国家(id):id_country 是“主键”country.id 的“外键”(如果需要,您可以在任何地方找到此定义以及如何在每个dbms 中声明它们)。


推荐阅读