와 관계 테이블에 여러 레코드를 추가.내가 설정을 심포니 3 개 테이블이 심포니
모델을 만들었을 때 symfony는 모든 것을 올바르게 구성했으며 기본적으로 스킬 테이블의 모든 스킬을 옵션으로 가지고있는 스킬의 드롭 다운 메뉴를 제공했습니다. 옵션을 선택하면 적절한 관계가 만들어집니다.
이것이 작동하고 있습니다 (일종의). 양식을 제출할 때 skill_id가 레코드에 추가되지 않습니다. 스킬 관계 테이블에 자동 증가 ID를 추가하고 flipbook_id 또는 skill_id를 추가하지 않습니다.
invalid parameter number number of bound variables does not match number of tokens
Whaaaat 그게 무슨 뜻 : 둘 이상의 체크 박스를 클릭하면 Aaaaaand,이 좋은 메시지가? 이것은 스키마 이슈가되어야합니다.
일부 코드는 어떨까요? 예, 부탁합니다.
스키마 :
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
FlipbookSkillsRelationsForm.class.php :
$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);
내가 더 코드 또는 설명을 제공해야하는지 알려주세요.
<?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;
}
}
UPDATE
나는 문제가이 같은 레코드의 여러 값을 결합하려고 믿습니다 : 여기
모델에서 생성 된 FlipbookSkillsTable.class입니다. 그래서 난 아직도 스키마가 제대로 꼼짝하지 않는id flipbook_id skill_id
1 2 1
2 2 2
3 2 3
, 그렇지 않으면 교리가 올바른 데이터를 처리하는 방법을 알게 될 것입니다 : 그것은이 같은 선택 각 기술에 대한 새로운 기록을해야한다? 내가 명시 적으로 많은 관계에 있어야하나요?
또한 제출할 때 flipbook_id 값을 레코드에만 추가합니다. skill_id 기록이 0
FLipbookRelationsForm입니다 :
class FlipbookSkillRelationsForm extends BaseFlipbookSkillRelationsForm
{
public function configure()
{
$this->widgetSchema['skill_id'] =
new sfWidgetFormDoctrineChoice(array('model' =>
$this->getRelatedModelName('flipbookskills'),
'expanded' => true, 'multiple' => true, 'add_empty' => false));
$useFields = array(
'flipbook_id',
'skill_id',
);
$this->useFields($useFields);
}
}
감사합니다. 업데이트되었지만 여전히 오류가 발생합니다. 또한 마지막 질문에 답하기 위해 : 플립 북 ID의 텍스트 입력은 값이로드되고 있는지를보기 위해 일시적이었습니다. 숨김으로 설정됩니다. 나는 sfWidgetFormSelectCheckbox를 사용하여 스킬을 체크 박스 HTML 요소로 가져 왔습니다. sfWidgetFormDoctrineChoice를 사용하면 드롭 다운에 넣습니다. 사용자가 여러 플럭스를 하나의 플립 북에 연결할 수 있기를 바랍니다. sfWidgetFormDoctrineChoiceMany가 제대로 작동하지 않습니다. 클래스를 가져 오는 중 오류가 발생했습니다. –
Aaaaah ... multiple을 true로 설정하면 라디오 상자가 만들어집니다. –
그래도 오류가 계속 발생합니다 : 잘못된 매개 변수 번호 : 바인딩 된 변수의 수가 토큰 수와 일치하지 않습니다. –