多分私の質問はちょっと奇妙に聞こえるかもしれません。ここに詳細があります:TYPO3のインラインフィールドのようにTCAマルチセレクトを処理するにはどうしたらいいですか?
"Position"と "Step"という2つのクラスを作成しました。さらに、すべてのステップにポジションを含めることができます。私のテーブルと関連するフィールドは以下のようになります。
CREATE TABLE tx_foxexample_domain_model_step (
...
positions int(11) unsigned DEFAULT '0' NOT NULL,
...
);
CREATE TABLE tx_foxexample_domain_model_position (
...
step int(11) unsigned DEFAULT '0' NOT NULL,
...
);
私はそれが通常の1だと思う:nの関係、各ステップは、n-位置を保存することができ、すべての位置は一段階の一部である可能性があるため。
私のクラスと関連するプロパティは、以下のようになります。
class Step extends AbstractEntity
{
...
/**
* Positions
*
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Fox\FoxExample\Domain\Model\Position>
* @cascade remove
*/
protected $positions = null;
...
}
class Position extends AbstractEntity
{
...
/**
* Stores the relation to step
*
* @var \Fox\FoxExample\Domain\Model\Step
*/
protected $step = null;
...
}
ステップ店オブジェクトの保存性のn位置と位置がちょうどステップのプロパティに関連するステップを格納します。
は、これまでのところ、私は、インラインフィールド経由で直接インラインステップの位置またはいくつかの位置を作成している、私のステップのためのTCAは、次のようなものだった:
...
'positions' => array(
'exclude' => 1,
'label' => '...',
'config' => array(
'type' => 'inline',
'foreign_table' => 'tx_foxexample_domain_model_position',
'foreign_field' => 'step',
'maxitems' => 50,
'appearance' => array(
'collapseAll' => 1,
'levelLinksPosition' => 'top',
'showSynchronizationLink' => 1,
'showPossibleLocalizationRecords' => 1,
'showAllLocalizationLink' => 1
),
),
),
...
ので、位置やステップの関係が正しく保存されました何らかの理由で私は多くの変更があり、位置が既に存在し、ユーザが必要な位置を選択しなければならないため、ステップ内の位置を作成する必要はもうありません。ユーザが各ステップに関連する位置を選択することができます変更しますが、私は、データベースのテーブルを見てみるならば、私はそのステップのフィールドを見ることができます。これにより
'positions' => array(
'exclude' => 1,
'label' => '...',
'config' => array(
'type' => 'select',
'foreign_table' => 'tx_foxexample_domain_model_position',
'foreign_table_where' => 'ORDER BY title ASC',
'minitems' => 0,
'maxitems' => 50,
),
),
:だから私は、マルチ選択フィールドに、インラインタイプを変更しました私のポジションテーブルは常に0で、ステップテーブルのポジションフィールドは現在ポジションuidを保持しています。
私はマルチ選択フィールドに 'foreign_field'を定義することができないので、私はいくつかの問題にぶつかるので、ポジションテーブルとの関係はなくなりました。さらに、1つの位置だけが保存されるため、1つの位置だけを追加できます。これは、1つのuidだけが保存されるため、選択された他の位置は無視されます。保存した後
:保存する前に
私は、マルチ選択フィールドのインラインフィールドの動作を維持したいです。複数選択フィールドのインラインフィールド動作を維持するにはどうすればよいですか?
ありがとう、私はできるだけ早くそれをテストします。 – Fox
これはmmテーブルで動作しますが、位置が複数のステップで使用されることを避ける方法はありますか?私はポジションが別のステップで再利用されることを望んでいないからです。私は、 "AND step = 0 ORDER BY title ASC"のように 'foreign_table_where'を拡張することができると考えましたが、このフィールドは常にゼロです。 – Fox
だから私はmultiselectフィールドとの1:n関係がこれは不可能ですか? – Fox