Php 仅当主关系存在时才加载嵌套关系
我试图从一个模型中加载一个嵌套的不动产关系,这个模型可以有也可以没有“主”关系 我有3个模型:建筑、地址和城市 我有一个建筑模型,可以有地址关系 如果地址关系存在,则始终具有城市关系本身 我的“列出建筑物”控制器功能如下所示:Php 仅当主关系存在时才加载嵌套关系,php,laravel,eloquent,laravel-8,Php,Laravel,Eloquent,Laravel 8,我试图从一个模型中加载一个嵌套的不动产关系,这个模型可以有也可以没有“主”关系 我有3个模型:建筑、地址和城市 我有一个建筑模型,可以有地址关系 如果地址关系存在,则始终具有城市关系本身 我的“列出建筑物”控制器功能如下所示: $buildingList = Building::with(['address','type'])->get(); 问题在于,城市嵌套关系不会以这种方式加载,因此我尝试了以下方法: $buildingList = Building::with(['address
$buildingList = Building::with(['address','type'])->get();
问题在于,城市嵌套关系不会以这种方式加载,因此我尝试了以下方法:
$buildingList = Building::with(['address.city','type'])->get();
这样,对于没有地址相关模型的每个建筑,我都会得到一个错误
有没有一种优雅的方法可以解决这个问题?您可以在建筑模型中获得城市(不要忘记在地址模型中创建关系) 然后,您的第一个查询将运行并加载城市
$buildingList = Building::with(['address','type'])->get();
要显示城市名称,请执行以下操作:
{{ $building->address->city->name }}
更多关于问题原因的信息: 您最有可能使用以下内容:
{{ $building->address->city->name }}
这将导致您描述的问题。Php将出错,因为它找不到您要查找的变量
最简单的解决办法是:
{{ $building->address->city->name ?? 'No address data' }}
现在,如果找不到地址,将显示“无地址数据”值。如果你的船漂浮在水面上,你也可以留下一根空绳子
现在,您可以使用以下代码加载它:
$buildingList = Building::with(['address.city','type'])->get();
你可以阅读更多关于??也称为“空合并运算符”您是否在地址模型上定义了
city
?
$buildingList = Building::with(['address.city','type'])->get();