php - Laravel Eloquent 获取关系字段
问题描述
我需要从 eloquent 对象中的关系中获取一个字段。
我正在使用数据表传递雄辩的对象以供查看。
我有一个名为 Offices 的模型和一个名为 Regions 的模型
办公室 id 名称区域 -> 属于区域
区域 ID 名称
我需要得到这样的东西:Offices.id、Offices.name、Regions.name
我尝试了以下方法,但失败了,如何在 get 方法中获取区域名称?
$ReportData = Offices::with('region')->get(['id', 'name', 'region.name']);
return datatables()->eloquent($ReportData)
解决方案
Eloquent 关系不使用连接,因此您无法在 Offices 查询中选择它们。
$ReportData = Offices::with('region')->get(['id', 'name']);
将执行单独的查询以预先加载所有区域,同时允许您将每个项目的相关区域作为属性访问:
$ReportData[0]->region->name
如果需要,您可以将其展平、使用地图或使用 Tim 建议的带有连接的查询。
您可以通过使用以下闭包来限制从数据库中选择的区域数据:
$ReportData = Offices::with(['region' => function($q) {
$q->select('name');
})->get(['id', 'name']);
但是,在大多数情况下,我会认为这是过度优化,除非该区域在其他列中有大量数据。
推荐阅读
- python - 时间序列数据预测的线性回归模型选择
- swift - 使用 AVPlayer swift 完成后再次播放音频
- python - 选择没有索引的下一个元素
- python - Python 对象可以调用继承堆栈中较低的方法吗?
- sql - 如何通过查询查看 SQL Server 中 api 的数据?
- java - Android资源编译失败(Android Studio ver. 3.2.1)
- groovy - ODI 12C 中的 SNP_POP 等效项?
- javascript - 使用 ajax 调用调用 Outlook API 以将事件添加到 Outlook 日历
- typescript - 如何在使用 Vue CLI@3 和 TypeScript 设置的项目中使用?
- php - 如何使 PHP 功能变得安静的 web 服务?