【发布时间】:2021-05-25 03:22:12
【问题描述】:
下面有两张表
用户:
| id | name | |
|---|---|---|
| 1 | abc | abc@... |
| 2 | xyz | xyz@... |
| 3 | abx | abx@... |
书籍:
| id | user_name | book | price |
|---|---|---|---|
| 1 | abc:x1 | book1 | 10 |
| 2 | xyz:x2 | book1 | 20 |
| 3 | abc:x5 | book3 | 30 |
| 4 | ab:x2 | book1 | 10 |
如果您注意到我的第二个表字段 user_name 有用户表的用户名加上 :x 和数字
也许这没有意义,但这是我的项目要求
现在,当我想用书籍查询某些用户时,例如如果我搜索 ID 为 (1) 的用户 由于 user_name,它应该给我 1 和 3 的记录
我试过了
$user = USER::with('books')
whereHas('books', function ($query) {
$query->where('user_name', 'like', 'name:%');
})->get();
我也试过了
USER::with('books')
->whereHas('books', function ($query) use ($name) {
$query->where('user_name', 'like', $name . ':%');
})
也不行。
还有如何在 :x 之后获得第三个额外的列值
另外,是否可以在模型中编写此查询?
谢谢
【问题讨论】:
-
请发布用户模型(尤其是书籍关系)
-
关系在用户模型中如下所示 public function books() { return $this->hasMany(Books::class,'user_name','name'); }
-
关系很好,因为我可以用精确的数学查询记录
-
你确定吗?如果两列之间没有完全匹配,mysql 关系就无法工作,所以你正在做的事情不能使用关系来建模
-
您可以做的是在模型中创建一个范围,并在那里进行查询,但您无法访问您可以对关系执行的所有操作