Laravel-foreach循环返回尝试获取非对象的属性 - php

我有一个数组的集合(18),所有数组都有一个关系-question

函数获取数据:

 $auditResults = Audit::where('audit_id', $id)
     ->with('question', 'question.auditQuestion')
     ->get();

在问题数组中,我可以看到要访问的属性。尝试访问它时,出现一个Trying to get property of non-object

采集:

Collection {#407 ▼
  #items: array:18 [▼
    0 => Audit {#411 ▶}
    1 => Audit {#412 ▶}
    2 => Audit {#413 ▶}
    ... shortened for brevity's sake
    14 => Audit {#425 ▶}
    15 => Audit {#426 ▶}
    16 => Audit {#427 ▶}
    17 => Audit {#428 ▶}
  ]
}

an Audit的输出:

@foreach($auditResults as $answer)
    {{$answer}}
@endforeach
{  
       "id":1,
       "audit_id":1,
       "audit_questions_details_id":2,
       "question":{  
          "id":2,
          "audit_question_id":2,
          "question_number":1,
          "comment":1,
          "header":0,
          "created_at":"2017-03-27 12:16:50",
          "updated_at":"2017-03-27 12:16:50",
          "audit_question":{  
             "id":2,
             "audit_detail_id":1,
             "question":"Lorum Ipsum Dorum",
             "created_at":"2017-03-27 12:16:50",
             "updated_at":"2017-03-27 12:16:50"
          }
       },
       "score":null,
       "comment":null,
       "created_at":null,
       "updated_at":null
    }

如果然后我继续访问问题关系:

@foreach($auditResults as $answer)
    {{$answer->question}}
@endforeach

它仅输出一个数字(我不确定它实际上是什么!,因为我希望它能输出问题关系):

1
2
3
4

如上所示,当它应该输出问题数组本身时,为什么只输出一个数字呢?

当我尝试访问question关系时显示错误:

@foreach($auditResults as $answer)
    {{$answer->question->id}}
@endforeach

审核模型:

class Audit extends Model
{
    protected $fillable = [
        'audit_id', 'audit_questions_details_id', 'question', 'score', 'comment'
    ];

    public function auditScore()
    {
        return $this->belongsTo('App\AuditScore', 'id', 'audit_id');
    }

    public function question(){
        return $this->belongsTo(AuditQuestionDetail::class, 'audit_questions_details_id');
    }

}

审核模型数据:

Laravel-foreach循环返回尝试获取非对象的属性 - php

AuditQuestionDetail模型:

class AuditQuestionDetail extends Model
{
    protected $table = 'audit_questions_details';

    protected $fillable = [
        'audit_question', 'question_number', 'comment',
    ];

    public function auditQuestion()
    {
        return $this->hasOne(AuditQuestion::class, 'id', 'audit_question_id');
    }

    public function score()
    {
        return $this->hasMany(Audit::class);
    }
}

Laravel-foreach循环返回尝试获取非对象的属性 - php

非常感谢。

参考方案

我敢肯定,我找到了您的问题:您的表中有模型questionAudit字段,因此,出于某些原因,Laravel将此字段优先于同名关系question的关系。只需尝试在模型Audit中重命名关系:

例如,更改此

public function question(){
    return $this->belongsTo(AuditQuestionDetail::class, 'audit_questions_details_id');
}

在此:

// I know this isn't the best name, just for the test purposes
public function rquestion(){
    return $this->belongsTo(AuditQuestionDetail::class, 'audit_questions_details_id');
}

并尝试:

@foreach($auditResults as $answer)
    {{$answer->rquestion}}
@endforeach

如果您不仅可以在此foreach中看到数字,还可以看到模型AuditQuestionDetail实例的JSON,那么您可以使用此关系中的任何可用字段:

@foreach($auditResults as $answer)
    {{$answer->rquestion->id}}
@endforeach

PHP Laravel从另一个驱动器读取文件 - php

我目前正在学习Laravel。我想知道是否有一种方法可以在Laravel中使用Storage::从另一个硬盘访问文件(使用Windows)。例如,我在驱动器C:上安装了带有Laravel的Xampp,但是我想访问网站目录之外的E:上的文件。我试过使用Storage::files('E:')和File::files('E:…

Laravel 5 dataTables,带有控制器功能的初始化表 - php

我正在尝试创建一个用户的dataTable,其中每一行都有一个下拉子行,其中包含用户权限的复选框。因此,“超级”管理员可以动态地单击用户并在表中分配其特权。首先,不确定这是否是一个好主意,请随时提出一个更好的方法。也许每行一个简单的弹出模式会更容易,但是现在我已经决定这是一种很酷的方法,所以我继续进行。但是,目前尝试用AJAX初始化dataTable令我感到…

检查对象是否已在集合中-Laravel - php

当我循环一系列不同的结果时,我希望将对象添加到新集合中。查询:$osRed = Item::where('category', 'Hardware') ->where(function ($query) { $query->where('operating_system', '…

Laravel-使用雄辩的语言在开始日期和结束日期之间选择行 - php

我想将此查询转换为雄辩的laravel,select * from schedule where (now() between start_date and end_date); 我尝试使用whereBetween,但是出现了一些错误。$schedule = Schedule::whereBetween(Carbon::now(), ['start…

laravel Hash::make继续给出不同的结果 - php

我想在laravel 4中使用身份验证我改了桌子和莫贝尔的名字当用户注册时,我拥有密码并将其保存,哈希为:$password = Hash::make(Input::get('password')); 然后当用户登录时,我想先对他/她进行身份验证。我这样做是这样的:if (Auth::attempt(array('usernam…