Laravel - blade 检查 object 是否有关系

Laravel - blade check if object has relationship

在我的控制器中,我得到一个复杂的查询,它根据用户提供的输入过滤数据:

if (conditionB) {
   $query = Model::with('relationA', 'relationB');
} else {
   $query = Model::with('relationA', 'relationC');
}

// checking filters and apply conditions...

$query = $query->get();

现在在我的 blade 文件中我正在循环结果并且我想显示 "eager load" 关系 B 或 C:

@if (count($myObject->relationB)) {
    <span>{{ $myObject->relationB->someField }}</span>
@else
    <span>{{ $myObject->relationC->someField }}</span>
@endif

有效,但是如果我的 $myObjectrelationC 而不是 relationB,那么 在验证 if 条件期间加载关系。

如何避免加载该关系?

当我这样做时:{{ $myObject }}

它给了我:

   // has relationB
   "field1": value1,
   "field2": value2,
    ....
   "fieldx": valuex,
   "relation_b":[  
      { 
         "relationBfield1": relationBvalue1,
         "relationBfield2": relationBvalue2,
      },
      { ... }

   // doesn't have relationB
   "field1": value1,
   "field2": value2,
    ....
   "fieldx": valuex

我尝试访问 relation_b(请注意,json 正在通过将 UpperCase 替换为 _<LowerCase> 来更改名称)但它 returns NULL,但如果我访问关系 B 它显示数据:

myObject->relation_b; // NULL
myObject->relation_b[0]; // NULL
myObject->relationB; // works, but if item has RelationC it will "eager load" relationship B just to check that if condition

我尝试了不同的选项,但我没有看到哪里出错了,我还尝试在我的模型中创建一个 public function

{{ $myObject->checkRelation() }}

public function checkRelation()
{
    if (count($this->relationB) > 0) {
        // code...

但我总是遇到同样的问题,当 object 项目没有 relationB 时,它会加载它以检查 if 条件。

如何避免?或者还有另一种方法可以在不执行额外查询的情况下检查关系是否包含我的 object 项?

如果要检查关系是否已加载,可以在模型上使用 relationLoaded() 方法:

@if ($myObject->relationLoaded('relationB')) {
    <span>{{ $myObject->relationB->someField }}</span>
@else
    <span>{{ $myObject->relationC->someField }}</span>
@endif