为什么$ registrationDetails显示一个空集合而不是一个包含2个项目的集合?

时间:2018-06-08 16:53:02

标签: php laravel

我想让参与者与ID为“2”的注册相关联。但是代码如下:

dd($registrationID); // shows "2".

$registrationDetails = Registration::with([
    'participants' => function ($query) use ($registrationID) {
        $query->select('id', 'ticket_type_id')->where('registration_id', $registrationID);
    }
])->find($registrationID);

dd($registrationDetails);

它似乎是一个空集合:

Registration {#286 ▼
  #relations: array:1 [▼
    "participants" => Collection {#106 ▼
      #items: []
    }
  ]
...
}

但在参与者表格中有2条记录,其中registration_id = 2。

你知道问题出在哪里吗?为什么返回一个空集合而不是一个包含2个项目的集合?

select()已经有效:

 $registrationDetails = Registration::with([
        'participants' => function ($query) use ($registrationID) {
            $query->select()->where('registration_id', $registrationID);
        }
    ])->find($registrationID);

只有select(),它显示与注册相关联的项目:

Registration {#264 ▼
...
  #relations: array:1 [▼
    "participants" => Collection {#266 ▼
      #items: array:1 [▶]
    }
  ]
}

1 个答案:

答案 0 :(得分:0)

Registration模型上的关系定义如下:

public function participants()
{
    return $this->hasMany(Participant::class);
}

然后您不必使用此附加查询。一个简单的Registration::with('participants')->find($id)会做到这一点。由于关系定义,只会提取具有正确registration_id的参与者。

但是如果你想要使用复杂的代码,原因可能是你没有选择registration_id。没有它,Eloquent查询引擎无法匹配参与者的来源,这是您的注册。因此,只需使用以下内容进行查询:

$query->select('id', 'ticket_type_id', 'registration_id')->where('registration_id', $registrationID);