我想让参与者与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 [▶]
}
]
}
答案 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);