在CakePHP表单中迭代多个子节点时,如何查找计数?

时间:2018-03-23 14:33:20

标签: cakephp

Student有多对多Course,而View/Students/Edit.ctp我有以下表单,为当前学生的每个现有课程提供单独的课程下拉。如何访问迭代器限制的适用计数?

<?php 
  echo $this->Form->create('Student');
  for($i = 0; $i < $whats_the_count; $i++) {
   echo $this->Form->input('StudentCourse.' . $i . '.course_id');
  }
?>

3 个答案:

答案 0 :(得分:0)

完全未记录的方法$this->Form->value()返回给定字段的ID数组,因此您只需使用count($this->Form->value($fieldName)),即

<?php 
  echo $this->Form->create('Student');
  for($i = 0; $i < count($this->form->value('StudentCourse')); $i++) {
    echo $this->Form->input('StudentCourse.' . $i . '.course_id');
  }
?>

答案 1 :(得分:-1)

你能不能简单地做一些事情:

$numCourses = count($student->StudentCourse);

答案 2 :(得分:-1)

如果他们有多对多,你需要第三张表来连接他们。 但首先要尝试适当地命名事物,这样你就不会感到困惑。

例如

学生= 1名学生

学生= 2名或更多学生

课程= 1门课程

课程= 2或更多课程

所以回答这个问题。您应该有一个名为students_courses的表,它将使用多对多关系连接两个表。因此,当您查询学生(只有一个)并且如果您编写学生 - >课程时,它将为您提供该学生的课程。

一步一步简单...... 1.找到一个学生的例子JOHN。

$student = $this->Students->find()
->contain('Courses')
->where(['name' => 'JOHN'])
->first();
  1. $student传递给edit.ctp视图
  2. 如果您仍然需要计算课程,只需编写count($student->courses),如果您执行上述步骤,则应立即使用。{/ li>

    更简单的方法是找到Courses本身并使用->find('list'),它会为您提供自动格式化的下拉选项。你可以在书中看到它。只是google cakephp查找列表。 希望这有帮助!祝你好运