我需要从雄辩的对象内部从关系中得到一个字段。
我正在使用数据传递雄辩的对象以供查看。
我有一个叫做办公室的模型和一个叫做区域的模型
办事处id名称区域->归属地区
区域id名称
我需要这样的东西: Offices.id,Offices.name,Regions.name
我已经尝试过下面的方法,但是失败了,如何在get方法中获得区域名称?
$ReportData = Offices::with('region')->get(['id', 'name', 'region.name']);
return datatables()->eloquent($ReportData)发布于 2018-08-07 19:20:13
若要将查询结果限制为特定列,并包括关系列,可以使用->join()和->select()。
$reportData = Offices::join("regions", "offices.region_id", "=", "regions.id")
->select("offices.id", "offices.name", "regions.name AS region_name")
->get();注意:必须猜测join逻辑;可能是逆的(regions.office_id等)
然后,当访问$reportData的内容时,您只能访问以下三列:
foreach($reportData AS $data){
$data->id;
$data->name;
$data->region_name;
}发布于 2018-08-07 18:49:52
雄辩的关系不使用联接,因此您无法在Office查询中选择它们。
$ReportData = Offices::with('region')->get(['id', 'name']);将执行一个单独的查询,以加载所有区域,同时允许您作为属性访问每个项的相关区域:
$ReportData[0]->region->name如果你想要的话,你可以把它夷为平地,使用地图,或者像提姆建议的那样使用带有连接的查询。
您可以使用以下闭包来限制从数据库中选择的区域数据:
$ReportData = Offices::with(['region' => function($q) {
$q->select('name');
}])->get(['id', 'name']);但是,在大多数情况下,我认为这是过度优化,除非该区域在其他列中有大量数据。
发布于 2022-01-21 15:40:59
因为这是在谷歌上排名第一,这是我在运行这个搜索时得到的,我认为它也应该包含Laravel 8的答案。来自拉勒维尔博士
在急切加载如下关系时,您可以指定列:
$ReportData = Offices::with('region:id, name')->get(['id', 'name']);请注意,您应该始终在此规范中包括id和foreign id列,否则它将无法工作。
所以它实际上应该是这样的:
$ReportData = Offices::with('region:id, name, office_id')->get(['id', 'name']);或者任何与你的特定关系相对应的东西。
希望您能发现这一点,勇敢的Laravel开发人员无意中发现了这一点!
https://stackoverflow.com/questions/51733418
复制相似问题