-2

as far as I understand I need to add a "cascade" parameter to the mapping. But my mapping is in XML. I found quite a bit of information about it but there was no result. Pleace help!

Мy error is: Multiple non-persisted new entities were found through the given association graph:\n\n * A new entity was found through the relationship 'Domain\Maintenance\Maintenance#affectedRegions' that was not configured to cascade persist operations for entity: Domain\AffectedRegion\AffectedRegion@0000000075384ba200000000535ab7f1. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}). If you cannot find out which entity causes the problem implement 'Domain\AffectedRegion\AffectedRegion#__toString()' to get a clue.\n *

XML fails:

<entity name="Domain\Maintenance\Maintenance" table="maintenances" repository-class="Infrastructure\Repositories\MaintenanceRepository">
    <id name="id" type="integer" column="id">
        <generator strategy="AUTO"/>
    </id>
    <field name="name" type="string"/>


    <one-to-many field="affectedRegions" target-entity="Domain\AffectedRegion\AffectedRegion" mapped-by="Domain\Maintenance\Maintenance" />
   <cascade>
            <cascade-merge/>
        </cascade>


</entity>

<entity name="Domain\AffectedRegion\AffectedRegion" table="affected_regions" repository-class="Infrastructure\Repositories\AffectedRegionRepository">
    <id name="id" type="integer" column="id">
        <generator strategy="AUTO"/>
    </id>
   
    <many-to-one field="region" target-entity="Domain\Region\Region" inversed-by="Domain\AffectedRegion\AffectedRegion">
        <join-column name="region_id" referenced-column-name="id" />
        <cascade>
            <cascade-persist/>
        </cascade>
    </many-to-one>
    
     <many-to-one field="maintenance" target-entity="Domain\Maintenance\Maintenance" inversed-by="Domain\AffectedRegion\AffectedRegion">
        <join-column name="maintenance_id" referenced-column-name="id" />
       <cascade>
            <cascade-persist/>
        </cascade>
    </many-to-one>
    

    <field name="vlans" type="string"/>
    <field name="olts" type="string"/>
   

</entity>

<entity name="Domain\Region\Region" table="regions" repository-class="Infrastructure\Repositories\RegionRepository">
    <id name="id" type="integer" column="id">
        <generator strategy="AUTO"/>
    </id>
    <field name="name" type="string"/>
    <field name="code" type="string"/>
    <one-to-many field="affectedRegions" target-entity="Domain\AffectedRegion\AffectedRegion" mapped-by="Domain\Maintenance\Maintenance" />
</entity>

this is my FK:

    $affectedRegionTable->addForeignKeyConstraint(
        $regionTable,
        ['region_id'],
        ['id'],
        ['onUpdate' => 'CASCADE'],
        'fk_affectedRegions_region_id'
    );

    $affectedRegionTable->addForeignKeyConstraint(
        $regionTable,
        ['maintenance_id'],
        ['id'],
        ['onUpdate' => 'CASCADE'],
        'fk_affectedRegions_maintenance_id'
    );

the relation I want to make is:

Maintenance ← one-to-many → AffectedRegions ← many-to-one → Region

1 Answers1

0

Here is the answer. Another way to add a cascade argument:

 <one-to-many field="affectedRegions" target-entity="Domain\AffectedRegion\AffectedRegion" mapped-by="maintenance">
        <cascade>
            <cascade-persist/>
            <cascade-remove/>
        </cascade>
    </one-to-many>