laravel - 包含 Laravel 8 对在自己的属性中加入数据
问题描述
我在 Laravel 8 Eloquent 中成功地做一个 rightJoin。我想将数据从我要加入的表中隔离出来,作为它自己在对象上的属性。
我的雄辩代码:
return Book
::rightJoin('tableB', 'tableB.book_id', '=', 'book.id')
->where('tableA.user_id', $uid)
->get();
现在我得到的数据被格式化为例如:
[
tableA.col1,
tableA.col2,
tableB.col1,
tableB.col2
]
我希望返回的对象结构如下:
[
tableA.col1,
tableA.col2,
tableB [
col1,
col2
]
]
我这样做是为了获取用户已经开始阅读的书籍列表,并希望将进度信息作为自己的属性来满足前端预期的结构。
我当然可以在后端使用 PHP 处理和重组数据,但这感觉相当难看。是否有 Laravel 8 Eloquent 功能可以帮助我按照前端现在期望的方式构造返回的数据?
解决方案
您正在寻找的是belongsTo
(或hasOne
视情况而定)关系。
模型/Book.php
public function tableB() {
return $this->belongsTo(TableB::class);
}
然后,在 eloquent builder 上,您可以使用它with
来检索与每个相关联books
的TableB
记录book
$books = Book::whereHas('tableB', function($query) {
$query->where('id', ...); // this is a query that will put a constraint of which results are returned. Adjust according to your necessity
})->get();
推荐阅读
- kivy - 在 RecyleView kivy 中添加 KivyMD 扩展面板
- javascript - Express.Js:从键值为字符串值的对象中获取值
- java - 从特定 URL 下载 pdf 时出现“java.net.SocketException: Connection reset”异常
- c# - 对表达式树的反射:传递参数并访问静态类上的字段,但使用表达式树
- freeswitch - CentOS Freeswitch v1.10:全新安装时没有音频
- go - 没有与本地包的查询“最新”匹配的版本
- django - Django - ImportError:无法为 API 设置导入“drf_yasg.generators.OpenAPISchemaGenerator”
- spring-boot - Intellij 中所有新项目的默认环境变量和 VM 选项
- angularjs - 加载了不需要的页面
- mysql - 将新列嵌套到 Select 查询中