ich bins nochmal. Ich habe jetzt versucht, auf die "saubere" Arbeitsweise umzustellen, indem ich 'includeBlankOption' => true gesetzt habe. Damit generiert Contao selbst folgendes Markup
HTML-Code:
<option value="">-</option>
<option value="1" selected="">Option1</option>
<option value="2" selected="">Option2</option>
<option value="3" selected="">Option3</option>
Sende ich diese Daten mit Formular Speichern an Contao, dann erhalte ich folgende Exception (weswegen ich diese Lösung auch bisher gemieden habe)
Code:
An exception occurred while executing a query: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'foreign_id' at row 1
Das dürfte richtig sein, da ein value="" nicht in ein int() umgewandelt werden kann.
Warum funktioniert dieses Standardverhalten des DCA nicht?
Meine Felddefinition sieht so aus:
Code:
'foreign_id' => [
'search' => true,
'filter' => true,
'inputType' => 'select',
'foreignKey'=> 'tl_foreign_table.name',
'relation' => ['type' => 'hasOne', 'load' => 'lazy'],
'eval' => ['chosen' => true, 'includeBlankOption' => true, 'blankOptionLabel' => '-', 'tl_class' => 'w50'],
],
Ich verwende kein SQL Key sondern Entities...
Code:
#[ManyToOne(targetEntity: ForeignEntity::class)]
#[JoinColumn(name: 'foreign_id', referencedColumnName: 'id')]
#[Column(type: 'integer', nullable: false, options: ['unsigned' => true, 'default' => 0])]
private ForeignEntity $foreign_id;
Oder muss das Feld vom Typ string sein? Das wäre für eine Fremdschlüssel-Id aber strange...
Lesezeichen