THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline

#1 Table avec contrainte

(13-04-2016 13:00:54)


Bonjour,

J'ai un soucis avec une table ou j'ai une contrainte
ma table est définie ainsi :

    <table name="mon_module" namespace="MonModule\Model">
        <column name="id" primaryKey="true" required="true" type="INTEGER" autoIncrement="true" />
        <column name="customer_id" type="INTEGER" />
        ...
        <column name="title" size="255" type="VARCHAR" required="true" default="" />
        <column name="description" type="CLOB" />
        <column name="chapo" type="LONGVARCHAR" />
        <column name="postscriptum" type="LONGVARCHAR" />
        <foreign-key foreignTable="customer" name="mm_customer_id" onDelete="CASCADE"  onUpdate="RESTRICT">
            <reference local="customer_id" foreign="id" />
        </foreign-key>
        <behavior name="timestampable" />
        <behavior name="i18n">
            <parameter name="i18n_columns" value="title, description, chapo, postscriptum" />
        </behavior>
    </table>

mon soucis, lorsque j’édite une entrée et que je souhaite mettre à 'null' le champ 'customer_id'
cela ne marche pas

dans mon formulaire d’édition

{form_field form=$form field="customer_id"}
    <div class="form-group">
        <label class="control-label" for="{$label_attr.for}">
            {$label}
            {if $required}<span class="required">*</span>{/if}
        </label>
        {form_error form=$form field="customer_id"}{$message}{/form_error}
        <select class="form-control" name="{$name}" id="{$label_attr.for}">
            <option value="">{intl l="Select a Customer" d="monmodule.bo.default"}</option>
            {loop type='customer' name='customer-all-list' current=false}
            <option value="{$ID}" {if $ID==$CUSTOMER_ID}selected{/if}>{$LASTNAME}</option>
            {/loop}
        </select>
    </div>
{/form_field}

comment faire pour supprimer la valeur de ce champ ? quelle valeur je dois passer ?
Merci

Offline

#2 Re: Table avec contrainte

(13-04-2016 13:04:14)


Dans ce contexte, une clef étrangère ne peut pas être null. Si tu veux pouvoir mettre cette colonne à null, il faut soit supprimer la contrainte mm_customer_id, soit déclarer la colonne <column name="customer_id" required="false" type="INTEGER" />


OpenStudio Toulouse

Offline

#3 Re: Table avec contrainte

(13-04-2016 13:26:21)


Merci Roadster31

J'ai mis cette contrainte au cas ou  un customer est effacé
en cascade cela effacerait les champs liés dans ma table

Offline

#4 Re: Table avec contrainte

(13-04-2016 14:23:46)


J'ai bien compris.


OpenStudio Toulouse

Offline

#5 Re: Table avec contrainte

(13-04-2016 15:22:14)


en fait en ne mettant pas le required dans la déclaration
ça la déclare automatiquement en required="false"

j'ai modifié la function createOrUpdate pour que cela passe