我有一个递归关系(部分和子部分) 在ReportSection模型中定义为:
function sub_sections() {
return $this->hasMany('App\ReportSection', 'parent_id');
}
我试图像这样迭代它:
$section = Section::find($id);
\DB::beginTransaction();
try {
foreach(ReportForm::unlockedForm($section->form_id)->get() as $report) {
foreach($report->sections()->where('section_id', $section->id)->get() as $reportSections) {
\Log::info($reportSections);
foreach($reportSections as $rSection) {
\Log::info($rSection);
foreach($rSection->sub_sections as $subSection) {
行\Log::info($reportSections);
按预期提供{"id":3,"report_form_id":1,"name_en":"DDD","name_fr":"DDD","created_at":"2016-11-29 07:47:24","updated_at":"2016-11-29 07:47:32","section_id":118,"parent_id":1,"order":99,"hidden":0}
但迭代通过它以某种方式给出一个布尔\Log::info($rSection);
给出1
最后一行foreach($rSection->sub_sections as $subSection) {
给出错误'Trying to get property of non-object'
为什么迭代通过关系集合会给出一个布尔值?我做错了什么?
编辑:将sub_sections()更改为sub_sections但错误仍然存在
答案 0 :(得分:0)
您应该调用属性名称而不是方法:
foreach($rSection->sub_sections as $subSection)
{}
答案 1 :(得分:0)
好好休息一下后,我能够发现问题是我在同一个集合中迭代两次。
而不是
foreach(ReportForm::unlockedForm($section->form_id)->get() as $report) {
foreach($report->sections()->where('section_id', $section->id)->get() as $reportSections) {
foreach($reportSections as $rSection) {
应该是
foreach(ReportForm::unlockedForm($section->form_id)->get() as $report) {
foreach($report->sections()->where('section_id', $section->id)->get() as $rSection) {