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