我在视图文件中从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来做。任何帮助都将不胜感激!!!
1条答案
按热度按时间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
关联数据所在的位置:如果您对数据结构不确定,请对其进行调试:
debug($clinica)