我无法在cakephp3视图中的forloop中显示数据

我无法在cakephp3视图中的forloop中显示数据,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,我无法在视图中显示阵列中的任何数据。我不知道为什么,因为我似乎遵循惯例。每个字段都是相同的错误。 我在下面的调试中显示数据,因此它只是一个表值数组。如何在视图中显示以下数组中的数据数组?注意,我只给出了第一条记录的样本数据,因为数组中的数据太多,无法显示 Notice (8): Trying to get property of non-object <?php foreach ($query3 as $bookmark): ?>

我无法在视图中显示阵列中的任何数据。我不知道为什么,因为我似乎遵循惯例。每个字段都是相同的错误。 我在下面的调试中显示数据,因此它只是一个表值数组。如何在视图中显示以下数组中的数据数组?注意,我只给出了第一条记录的样本数据,因为数组中的数据太多,无法显示

Notice (8): Trying to get property of non-object 
  <?php 
            foreach ($query3 as $bookmark):
            ?>
            <tr>
                <?php 
              debug( $bookmark);
                ?>

                <td><?= h($bookmark->lessons->id) ?></td>
                <td><?= h($bookmark->lessons->lesson_date) ?></td>
                <td><?= h($bookmark->tutors->first_name) ?></td>
                 <td><?= h($bookmark->tutors->last_name) ?></td>


            </tr>
            <?php endforeach; ?>



object(App\Model\Entity\Lesson) {

    'tutoring_type_id' => (int) 1,
    'students' => [
        'id' => '249',
        'first_name' => 'Jams',
        'last_name' => 'Phil'
    ],
    'tutoring_type' => object(App\Model\Entity\TutoringType) {

        'value' => 'Individual Tuition',
        '[new]' => false,
        '[accessible]' => [
            '*' => true
        ],
        '[dirty]' => [],
        '[original]' => [],
        '[virtual]' => [],
        '[errors]' => [],
        '[invalid]' => [],
        '[repository]' => 'TutoringTypes'

    },
    'lessons' => [
        'id' => '12419',
        'lesson_date' => '2016-05-31'
    ],
    'tutors' => [
        'id' => '12',
        'first_name' => 'drew',
        'last_name' => 'Toy'
    ],
    'subjects' => [
        'id' => '16',
        'name' => 'Maths: Year 7 - 10'
    ],
    'terms' => [
        'id' => '12',
        'title' => 'Term Four - 2015'
    ],

UPDATE
     $query3 = $this->Lessons->find()
              ->contain(['Tutors','Subjects', 'TutoringTypes','Terms','Students'])
              ->select(['lessons.id','lessons.lesson_date','tutors.id','tutors.first_name','tutors.last_name','TutoringTypes.value',
                  'subjects.id','subjects.name'])      
               ->where(['Lessons.lesson_date >' => $a3
                   ]);


 $this->set(compact('query3'));
        $this->set('_serialize', ['query3']);
注意(8):尝试获取非对象的属性
对象(应用程序\模型\实体\课程){
“教程类型\u id”=>(int)1,
“学生”=>[
'id'=>'249',
“first_name”=>“Jams”,
“姓”=>“菲尔”
],
“教程类型”=>对象(应用程序\模型\实体\教程类型){
“价值”=>“个人学费”,
“[新]”=>错误,
“[可访问]”=>[
“*”=>true
],
“[dirty]”=>[],
“[原件]”=>[],
“[虚拟]”=>[],
“[错误]”=>[],
“[无效]”=>[],
“[repository]”=>“教程类型”
},
“课程”=>[
'id'=>'12419',
“课程日期”=>“2016-05-31”
],
“导师”=>[
'id'=>'12',
“名字”=>“德鲁”,
“姓氏”=>“玩具”
],
“主题”=>[
'id'=>'16',
“名称”=>“数学:7-10年级”
],
“术语”=>[
'id'=>'12',
“标题”=>“第四学期-2015”
],
更新
$query3=$this->Lessons->find()
->包含(['Tutors','Subjects','TutoringTypes','Terms','student'])
->选择(['classes.id'、'classes.classes\u date'、'tutors.id'、'tutors.first\u name'、'tutors.last\u name'、'TutoringTypes.value',
'subjects.id'、'subjects.name'])
->其中(['Lessons.lesson_date>”=>$a3
]);
$this->set(压缩('query3'));
$this->set('u serialize',['query3']);

我找到了答案,但在文档中找不到。 它可以工作,但如果有更好的方法,请纠正它

   <td><?= $bookmark->lessons['id'] ?></td>
   <td><?= $bookmark->lessons['lesson_date'] ?></td>
   <td><?= $bookmark->tutors['first_name'] ?></td>
   <td><?= $bookmark->tutors['last_name'] ?></td>
   <td><?= $bookmark->subjects['name'] ?></td>
在视图中

            <td><?= $bookmark->id ?></td>
            <td><?= $bookmark->lesson_date ?></td>
            <td><?= $bookmark->tutor->first_name ?></td>
            <td><?= $bookmark->tutor->last_name ?></td>

             <td><?= $bookmark->students[0]->first_name ?></td>
             <td><?= $bookmark->students[0]->last_name ?></td>
             <td><?= $bookmark->subject->name ?></td>
             <td><?= $bookmark->tutoring_type->value ?></td>


学生
课程
似乎是数组而不是对象。所以你应该做
$bookmark->classes['id']
。我不知道你为什么用数组而不是对象,你应该显示你的
find()
code我已经在下面回答了这个问题,它是有效的。我在文档中找不到这个信息,我给出了数据数组。如果有帮助的话,我还提供了find()(查看底部有问题的部分)…你说我应该使用对象是什么意思?我在文档中找不到此信息。你能给我看一下吗?我检查了集合中的文档。我只是想在视图中显示结果,所以我使用了数组。如果我想在查询中使用其他方法,那么我需要查询对象而不是数组,请在问题a中添加信息关于如何创建您的查找()call.似乎与您的问题有关,但很难说清楚,因为我们不太了解您的关系和您的问题。您正在谈论的文档中的这些信息在哪里?我自己找不到,所以我该怎么办?我确实使用了bake,但我也猜不到语法正确。@AD7six似乎用户打开了其他2 que关于基本上相同的问题和。不知何故,他的DBMS是不区分大小写的,当他写
课程而不是
课程时,不会给出错误,但是cake返回一个数组而不是一个对象。不知道这是不是设计的行为,一个bug还是什么。@AD7six好的,但现在我只是好奇:正如你在t中看到的那样他在操作的底部调用了
find()
,在
contain()
方法中使用了camelCase,但在
select()
方法中使用了小写。例如
contain(['Tutors',…])
但是
select(['Tutors.id',…])
。通常在mysql中,这会给出一个错误。相反,当存在数组而不是对象时,他会得到一个结果。除了
tutoring\u type
之外,这是一个对象,事实上他选择了
'TutoringTypes.value'
(camelCase)。这至少很奇怪(至少对我来说)坦率地说,我很感谢你们的帮助,但到目前为止,你们还不能向我指出任何相关的文档l。我所要做的只是从查询中获取数据,然后简单地显示它。这非常简单。问题是文档不清楚如何显示关联表中的查询。当我有型号n的大写字母时,我无法显示数据我不清楚在查询选择中是否为每个模型都有一个大写字母。至于对象或数组,我同样不明白为什么从查询结果中获取数组。
            <td><?= $bookmark->id ?></td>
            <td><?= $bookmark->lesson_date ?></td>
            <td><?= $bookmark->tutor->first_name ?></td>
            <td><?= $bookmark->tutor->last_name ?></td>

             <td><?= $bookmark->students[0]->first_name ?></td>
             <td><?= $bookmark->students[0]->last_name ?></td>
             <td><?= $bookmark->subject->name ?></td>
             <td><?= $bookmark->tutoring_type->value ?></td>