Skip to content

Belongs_to relation not saved/altered when calling save() after deleting a related model [1.7/develop] #283

@philipptempel

Description

@philipptempel

Assume two models, \Model\Record and \Model\Group, with a \Model\Record belongs_to \Model\Group, \Model\Group has_many \Model\Record.

When doing something like the following:

<?php
// Get the record
$record = \Model\Record::find(<some arbitrary ID>);

// Change the assigned group
$record->group = \Model\Group::find(<some arbitrary ID>);

/*
 * Assign some other properties and related data here, too
 */

// Save at the end to save on DB-queries
$record->save()

then $record->group will be changed to the new ORM-object, but the property of \Model\Record keeping the reference to its assigned group is not updated.

An exemplary result of \Debug::dump($record->to_array()); before and after assigning the group as well as after calling save() is listed below:

Before changing the group

     surname (String): "Tempel" (6 characters)
     prename (String): "Philipp" (7 characters)
     archived (Boolean): false
     created_at (Integer): 1374585392
     updated_at (Integer): 1374587495
     archived_at : null
     record_id (String): "1" (1 characters)
     rel_group_id (String): "1" (1 characters)
     meta (Array, 82 elements) ↵
     group (Array, 7 elements) ↵
         group_id (String): "1" (1 characters)
         name (String): "Student" (7 characters)
         slug (String): "student" (7 characters)
         protected (Boolean): true
         created_at (Integer): 1374478794
         updated_at (Integer): 1374478794

After changing the group

     surname (String): "Tempel" (6 characters)
     prename (String): "Philipp" (7 characters)
     archived (Boolean): false
     created_at (Integer): 1374585392
     updated_at (Integer): 1374587495
     archived_at : null
     record_id (String): "1" (1 characters)
     rel_group_id (String): "1" (1 characters)
     meta (Array, 82 elements) ↵
     group (Array, 6 elements) ↵
         group_id (String): "2" (1 characters)
         name (String): "Mitarbeiter" (11 characters)
         slug (String): "mitarbeiter" (11 characters)
         protected (Boolean): true
         created_at (Integer): 1374478794
         updated_at (Integer): 1374478794

After save()

     surname (String): "Tempel" (6 characters)
     prename (String): "Philipp" (7 characters)
     archived (Boolean): false
     created_at (Integer): 1374585392
     updated_at (Integer): 1374587599
     archived_at : null
     record_id (String): "1" (1 characters)
     rel_group_id (String): "1" (1 characters)
     meta (Array, 86 elements) ↵
     group (Array, 6 elements) ↵
         group_id (String): "2" (1 characters)
         name (String): "Mitarbeiter" (11 characters)
         slug (String): "mitarbeiter" (11 characters)
         protected (Boolean): true
         created_at (Integer): 1374478794
         updated_at (Integer): 1374478794

If save() is called right after changing the group, it works perfectly, however.

Using 1.6/master changes the output of the last \Debug::dump to rel_group_id (String): "2" (1 characters) which is the expected behavior.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions