Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用sfWidgetFormSelectCheckbox从数据库中提取选项数组_Php_Widget_Doctrine_Symfony 1.4 - Fatal编程技术网

Php 使用sfWidgetFormSelectCheckbox从数据库中提取选项数组

Php 使用sfWidgetFormSelectCheckbox从数据库中提取选项数组,php,widget,doctrine,symfony-1.4,Php,Widget,Doctrine,Symfony 1.4,我在symfony中设置了3个表: “动画书”表、技能表和关系表,用于将每个技能id与每个“动画书”id连接起来 当我构建模型时,symfony正确地构建了所有内容,并且默认情况下为技能提供了一个下拉菜单,其中包含技能表中的所有技能作为选项。您可以选择一个选项,它将创建适当的关系 我需要技能成为多个选择的复选框,而不是单一选择下拉菜单,因此我使用的是sfWidgetFormSelectCheckbox小部件 文档说明使用“选项”填充多个选项,如下所示: $this->widgetSchem

我在symfony中设置了3个表:

“动画书”表、技能表和关系表,用于将每个技能id与每个“动画书”id连接起来

当我构建模型时,symfony正确地构建了所有内容,并且默认情况下为技能提供了一个下拉菜单,其中包含技能表中的所有技能作为选项。您可以选择一个选项,它将创建适当的关系

我需要技能成为多个选择的复选框,而不是单一选择下拉菜单,因此我使用的是
sfWidgetFormSelectCheckbox
小部件

文档说明使用“选项”填充多个选项,如下所示:

$this->widgetSchema['skill_id'] = new sfWidgetFormSelectCheckbox(
  array('choices' => "choice1", "choice2", choice3"), 
  array('class' => 'text size-500'));
我不知道如何从choices数组中的skills表中加载选项。我知道它们在那里的某个地方,因为它们最初包含在默认小部件中。如何将它们拉到单个复选框输入元素中,其中的值与技能id匹配

代码怎么样

模式:

Flipbook:
  tableName: flipbook
  inheritance:
    extends: SvaGeneric
    type: concrete
  columns:
    title: { type: string(255) }
    career_associations: { type: clob }
    skills: { type: string(255) }
    skills_associations: { type: clob }
    program: { type: string(255) }
    program_associations: { type: clob }
    draft_id: { type: integer(10) }

FlipbookSkills:
  tableName: flipbook_skills
  columns:
    title: { type: string(255) }
  relations:
    Flipbook:
      foreignAlias: flipbook_skills
      alias: skills
      local: title
      onDelete: SET NULL   

FlipbookSkillRelations:
  tableName: flipbook_skill_relations
  actAs:
    SoftDelete: ~
  options:
  columns:
    flipbook_id: { type: integer(10), notnull: false }
    skill_id: { type: integer(10), notnull: false }
  relations:
    Flipbook:
      foreignAlias: flipbook_skills_flipbook
      alias: flipbook
      local: flipbook_id
      onDelete: CASCADE
    FlipbookSkills:
      foreignAlias: flipbook_skills_skills
      alias: flipbookskills
      local: skill_id
      onDelete: CASCADE
$this->widgetSchema['flipbook_id'] = new sfWidgetFormInputText(array(), array('class' => 'text size-500'));

$this->widgetSchema['skill_id'] = new sfWidgetFormSelectCheckbox(array('choices' => "**WHAT GOES HERE??**"), array('class' => 'text size-500'));


$useFields = array(
  'flipbook_id',
  'skill_id',
);

$this->useFields($useFields);
FlipbookSkillsRelationsForm.class.php:

Flipbook:
  tableName: flipbook
  inheritance:
    extends: SvaGeneric
    type: concrete
  columns:
    title: { type: string(255) }
    career_associations: { type: clob }
    skills: { type: string(255) }
    skills_associations: { type: clob }
    program: { type: string(255) }
    program_associations: { type: clob }
    draft_id: { type: integer(10) }

FlipbookSkills:
  tableName: flipbook_skills
  columns:
    title: { type: string(255) }
  relations:
    Flipbook:
      foreignAlias: flipbook_skills
      alias: skills
      local: title
      onDelete: SET NULL   

FlipbookSkillRelations:
  tableName: flipbook_skill_relations
  actAs:
    SoftDelete: ~
  options:
  columns:
    flipbook_id: { type: integer(10), notnull: false }
    skill_id: { type: integer(10), notnull: false }
  relations:
    Flipbook:
      foreignAlias: flipbook_skills_flipbook
      alias: flipbook
      local: flipbook_id
      onDelete: CASCADE
    FlipbookSkills:
      foreignAlias: flipbook_skills_skills
      alias: flipbookskills
      local: skill_id
      onDelete: CASCADE
$this->widgetSchema['flipbook_id'] = new sfWidgetFormInputText(array(), array('class' => 'text size-500'));

$this->widgetSchema['skill_id'] = new sfWidgetFormSelectCheckbox(array('choices' => "**WHAT GOES HERE??**"), array('class' => 'text size-500'));


$useFields = array(
  'flipbook_id',
  'skill_id',
);

$this->useFields($useFields);
让我知道我是否应该提供进一步的代码或解释

更新

以下是在模型中生成的FlipbookSkillsTable.class:

<?php

/**
 * FlipbookSkillsTable
 * 
 * This class has been auto-generated by the Doctrine ORM Framework
 */
class FlipbookSkillsTable extends Doctrine_Table
{
    /**
     * Returns an instance of this class.
     *
     * @return object FlipbookSkillsTable
     */
    public static function getInstance()
    {
        return Doctrine_Core::getTable('FlipbookSkills');
    }

    public function retrieveForFilter()
    {
      $res = $this->createQuery('s')
        ->select('s.id, s.name')
        ->orderBy('s.name ASC')
        ->execute(array(), Doctrine_Core::HYDRATE_NONE);

      // if you want an empty line
      $rets = array('' => '');
      foreach ($res as $ret)
      {
        $rets[$ret[0]] = $ret[1];
      }

      return $rets;
    }

    public function getAllFlipbookSkills() {
        $allSkills = Doctrine_Query::create()
            ->from('FlipbookSkills')
            ->orderBy('title ASC')
            ->execute();
    return $allSkills;
    }
}

我通常是这样做的:

添加一个自定义方法来检索
SkillTable.class.php
中的技能数组,类似于:

  /**
   * Retrieve array for display the select list for filter
   *
   * @return array
   */
  public function getFlipbookskills()
  {
    $res = $this->createQuery('s')
      ->select('s.id, s.name')
      ->orderBy('s.name ASC')
      ->execute(array(), Doctrine_Core::HYDRATE_NONE);

    // if you want an empty line
    $rets = array('' => '');
    foreach ($res as $ret)
    {
      $rets[$ret[0]] = $ret[1];
    }

    return $rets;
  }
然后在你的表格中,像这样称呼它:

$this->widgetSchema['skill_id'] = new sfWidgetFormSelectCheckbox(
  array('choices' => Doctrine::getTable('FlipbookSkills')->getFlipbookskills()), 
  array('class' => 'text size-500')
);

我得到了这个致命错误:致命错误:调用未定义的方法FlipbookSkills::getInstance()。我认为这可能是一个schema.yml错误,但对我来说很好。有什么想法吗?试试Doctrine_Core::getTable(‘FlipbookSkills’)是的,明白了。好的,这正是我正在使用的:$this->widgetSchema['skill_id']=new-sfWidgetFormSelectCheckbox(数组('choices'=>Doctrine::getTable('FlipbookSkills')->getFlipbookskills()),数组('class'=>'text size-500');