【发布时间】:2020-02-15 17:14:42
【问题描述】:
我有一个存储有关事件信息的表。该事件具有位置属性(字符串)。现在我有一个表 locations 表,其中存储了位置名称及其地址。
现在我想从数据库中获取所有事件及其位置。
因为我从外部来源获取所有事件,所以我不能使用 id 来建立关系。
所以我需要的是一种类似于$this->hasOne('Location')->where('name','LIKE','%location_name%');的关系
这样的事情可能吗?如果没有,实现这样的最佳实践是什么,所以我得到这样的输出 JSON:
{
"name":"Event Abc",
"date":"2019-10-18 12:00:00",
"location":"Location X",
"location_details": {
"name":"Location X",
"address":"Street XYZ"
}
}
谢谢
【问题讨论】:
-
您可以改为在
name列上进行连接,但我认为您不能将其与like运算符一起使用。在 Laravel 中,您可以使用$this->hasOne('Location', 'name', 'location');(可能不太正确,但第二和第三个参数是您指定连接列的方式) -
@TimLewis -
$this->hasOne('Location', 'name', 'location');,工作 - 但 LIKE 会更好 -
对,但这不是
joins 在 SQL 中的工作方式。hasOne()(以及其他关系方法,belongsTo()等)构造了用于链接两个表的连接逻辑,因此列值需要完全匹配。同样,varchar列(字符串)可以在joins 中使用,但不能用于通配符检查。
标签: laravel eloquent relationship