CakePHP4.x有很多foreach

CakePHP4.x有很多foreach,cakephp,associations,has-many,cakephp-4.x,Cakephp,Associations,Has Many,Cakephp 4.x,从视图文件中的hasMany关系中获取结果时遇到一些困难。我没有从调试控制台得到任何错误,所以我不确定我在哪里绊倒了。 我认为,如果我在表文件中没有正确设置foreach函数,可能是因为我在视图文件中没有正确引用(我不确定如何为此编写foreach函数),等等 2个表格:“临床医生”、“Tratamientos”(服务) 目标:在诊所的个人资料页面上,我需要显示该诊所的信息(位置、电话号码等)&列出与该诊所相关的所有服务 ClinicasTable.php public function ini

从视图文件中的hasMany关系中获取结果时遇到一些困难。我没有从调试控制台得到任何错误,所以我不确定我在哪里绊倒了。 我认为,如果我在表文件中没有正确设置foreach函数,可能是因为我在视图文件中没有正确引用(我不确定如何为此编写foreach函数),等等

2个表格:“临床医生”、“Tratamientos”(服务)

目标:在诊所的个人资料页面上,我需要显示该诊所的信息(位置、电话号码等)&列出与该诊所相关的所有服务

ClinicasTable.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'
    ]);
}
public function view($id = null)
{
    $clinica = $this->Clinicas->get($id, [
        'contain' => ['Tratamientos']
    ]);

    $this->set(compact('clinica'));
}
<?php foreach($clinica as $tratamiento): ?>

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

<?php endforeach;?>
ClinicasController.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'
    ]);
}
public function view($id = null)
{
    $clinica = $this->Clinicas->get($id, [
        'contain' => ['Tratamientos']
    ]);

    $this->set(compact('clinica'));
}
<?php foreach($clinica as $tratamiento): ?>

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

<?php endforeach;?>
view.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'
    ]);
}
public function view($id = null)
{
    $clinica = $this->Clinicas->get($id, [
        'contain' => ['Tratamientos']
    ]);

    $this->set(compact('clinica'));
}
<?php foreach($clinica as $tratamiento): ?>

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

<?php endforeach;?>


我已经查看了关联的示例,但不知道如何从表中获取数据。我总是可以通过php函数进行ajax查询,但我真的希望使用CakePHP正确地进行查询。任何帮助都将不胜感激

尽管迭代几乎只是基本的PHP,但本书中的示例可能会更有帮助,并展示了对相关数据的迭代和使用,尽管它应该已经让您很好地了解了数据的位置

您正在获取单个实体(Clinica的一个实例),因此您不能也不应该对其进行迭代。您的代码将要做的是,这不是您想要的,并且在您的情况下不会做任何事情,因为默认情况下,实体没有任何具体的公共属性

关联的数据将在
Clinica
实体的关联属性上找到,除非通过关联的
属性
选项专门配置,否则该实体是唯一的,因此对于
tratamintos
,它将是
tratamintos

需要注意的是,你真的应该在这里使用美国英语来命名,因为所有的屈折变化魔术都是为了解决这个问题而设计的,当其他语言的名称不能正确屈折变化时,它们很容易导致不匹配/问题

长话短说,您迭代
$clinica
对象的
tratamintos
属性,这就是
有许多相关数据的地方:



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

我非常感谢您提供的详细答案和建议。希望我已经标记好了,这样其他人都能找到它。我确实犯了一个错误,在db中混合了fas语言(Es中的表名和En中的列名),因此为了长期的可管理性,我将尝试改进它。还值得一提的是“bake”工具,它(正确应用)应该为您生成所有这些代码,为您提供一个坚实的模板来进行小的编辑,我对蛋糕烘焙很熟悉,你能告诉我你在想什么吗格雷格?您的意思是更新ES中表名的所有引用实例吗?我知道如果db的关系是在运行cake bake之前建立的,它将生成正确声明关系的代码(hasMany)