我已經安裝symfony的3個表:添加多個記錄的關係表用symfony
翻書表中,A技能表和關係表,給每個技能ID,每個ID翻書連接。
當我構建模型時,symfony構造了一切正確,默認情況下爲技能提供了一個下拉菜單,該技能擁有技能表中的所有技能作爲選項。您可以選擇一個選項並創建適當的關係。
這是工作(有點)。提交表單時,它不會將skill_id添加到記錄中。它只是將自動增量ID添加到技能關係表中,而不是flipbook_id或skill_id。 Aaaaaand,如果你點擊一個以上的複選框,你會得到這個漂亮的消息:
invalid parameter number number of bound variables does not match number of tokens
Whaaaat意味着什麼?這已經是一個架構問題了嗎?
一些代碼如何?是的,請。
模式:
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);
讓我知道我是否應該提供更多的代碼或解釋。
這裏是模型生成的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;
}
}
UPDATE
我相信問題是它試圖在同一記錄多值綁定。它應該選擇每個技能的新紀錄,就像這樣:
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);
}
}
感謝您對架構的幫助。它已更新,但我仍然收到錯誤。還要回答一些最後的問題:對於活頁簿標識的文本輸入是暫時的,以查看該值是否正在被加載。它被設置爲隱藏。我正在使用sfWidgetFormSelectCheckbox將技巧加入複選框html元素。如果我使用sfWidgetFormDoctrineChoice,它會將它們放入下拉列表中。我希望用戶能夠將多種技能與一個翻書相關聯。我無法讓sfWidgetFormDoctrineChoiceMany正常工作。獲取類未找到錯誤。 –
Aaaaah ...設置爲true,它會使收音機框。 –
儘管仍然收到錯誤:無效的參數編號:綁定變量的數量與令牌的數量不匹配 –