CakePHP 4.x有许多forach

2admgd59  于 2022-11-12  发布在  PHP
关注(0)|答案(1)|浏览(229)

我在视图文件中从hasMany关系中获取结果时遇到了一些困难。我没有从调试控制台中得到任何错误,所以我不确定我是在哪里出错的。我想可能是我在视图文件中没有正确引用(我真的不知道如何为此编写foreach函数),如果我在表文件中没有正确设置它,等等。
2张table:“诊所”,“治疗”(服务)
目标:在诊所的个人资料页面上,我需要显示该诊所的信息(位置、电话号码等),并列出与该诊所相关的所有服务。

临床表格.php

public function initialize(array $config): void
{
    parent::initialize($config);

    $this->setTable('clinicas');
    $this->setDisplayField('name');
    $this->setPrimaryKey('clinic_id');

    $this->addBehavior('Timestamp');

    $this->hasMany('Tratamientos', [
        'foreignKey' => 'clinic_id',
        'joinType'   => 'INNER'
    ]);
}

诊所控制器.php

public function view($id = null)
{
    $clinica = $this->Clinicas->get($id, [
        'contain' => ['Tratamientos']
    ]);

    $this->set(compact('clinica'));
}

查看.php

<?php foreach($clinica as $tratamiento): ?>

<?= h($clinica->tratamiento->name)?>

<?php endforeach;?>

我已经看了documentation的关联,但不知道如何从我的表中获得数据。我总是可以通过php函数做一个 AJAX 查询,但我真的很想用CakePHP来做。任何帮助都将不胜感激!!!

wz3gfoph

wz3gfoph1#

尽管迭代几乎只是基本的PHP,但书中的示例可能会更有帮助,并展示了对关联数据的迭代和使用,尽管它应该已经给予您很好地了解数据所在的位置。
您正在获取单个实体(Clinica的一个示例),因此您不能也不应该迭代它。您的代码将执行iterate over all public properties of the entity object,这不是您想要的,并且在您的情况下不会执行任何操作,因为默认情况下实体没有任何具体的公共属性。
关联的数据将在Clinica实体的关联属性上找到,除非通过关联的property选项以其他方式特别配置,否则该关联属性是plural, underscored, lowercased variant of the association name,因此对于Tratamientos,该关联属性将是tratamientos
需要注意的是,你真的应该坚持美国英语在这里命名,因为所有的变形魔术围绕naming conventions是设计与工作,在其他语言的名称很容易导致不匹配/问题时,他们不能正确变形!
长话短说,迭代$clinica对象的tratamientos属性,这是hasMany关联数据所在的位置:

<?php foreach($clinica->tratamientos as $tratamiento): ?>

<?= h($tratamiento->name)?>

<?php endforeach;?>

如果您对数据结构不确定,请对其进行调试:debug($clinica)

相关问题