Ergebnis 1 bis 4 von 4

Thema: $model->save() ohne Datenbankänderung

  1. #1
    Contao-Nutzer
    Registriert seit
    18.01.2011.
    Ort
    Leipzig
    Beiträge
    23

    Standard $model->save() ohne Datenbankänderung

    Ich habe gerade das folgende skurile Verhalten und komme nicht weiter:

    Kurzfassung: In einem Controller, der eine Route verarbeitet wird ein $model->save() ausgeführt. Der Wert wird im Model als geändert angezeigt aber nicht in der Datenbank gespeichert.

    Details:

    Meine Methode:
    PHP-Code:
    #[Route('/exampleroute', name: 'exampleroute_name', defaults: ['_scope' => 'backend', '_token_check' => false])]
        
    public function confirmDetailmember(Request $requestConnection $connection): Response
        
    {
            
    $detailMemberId $request->request->get('detailMemberId');
            
    $returnUrl $request->request->get('returnUrl');

            if (
    $detailMemberId && $returnUrl) {
                try {
                    
    $detailMember = \App\Model\ProjectDetailMemberModel::findByPk($detailMemberId);
                    if (
    $detailMember) {
                        
    $detailMember->status 'confirmed';
                        
    $detailMember->save();
                    }

                    
    Message::addConfirmation('Model wurde gespeichert: ' $detailMember->status);
                    return new 
    RedirectResponse($returnUrl);
                } catch (\
    Exception $e) {
                    
    Message::addError('Das Speichern war nicht erfolgreich: ' $e->getMessage());
                    return new 
    RedirectResponse($returnUrl);
                }
            } else {
                
    Message::addError('Ein Fehler ist aufgetreten.');
                return new 
    RedirectResponse($this->generateUrl('fallback_route_name'));
            }
        } 
    Die Route wird erfolgreich aufgerufen. Der erfolgreiche Redirect wird durchgeführt und auch die Confirmation wird angezeigt. Der Wert in der DB wird jedoch nicht geändert. Was könnte das Verhalten verursachen?

    Ausgeführt wird der Code im Debug-Modus, update und install sind zusätzlich ausgeführt.
    Hat jemand eine Idee?
    Geändert von basistom (07.04.2024 um 19:23 Uhr)

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.126
    Partner-ID
    10107

    Standard

    Wenn du direkt nach
    PHP-Code:
    $detailMember->status 'confirmed'
    ein
    PHP-Code:
    dd($detailMember); 
    einfügst, steht in "arrModified" das Feld "status" drin?
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    18.01.2011.
    Ort
    Leipzig
    Beiträge
    23

    Standard

    Ich hab folgende Dumps eingefügt:

    PHP-Code:
                    $detailMember = \App\Model\ProjectDetailMemberModel::findByPk($detailMemberId);
                    
    dump($detailMember); // #1
                    
                    
    $detailMember->status 'confirmed';
                    
    dump($detailMember); // #2

                    
    $detailMember->save();
                    
    dump($detailMember); // #3

                    
    $detailMember->refresh();
                    
    dd($detailMember); // #4 
    Dabei erhalte ich folgende Ausgaben:

    #1:
    PHP-Code:
    App\Model\ProjectDetailModel {#1207 ?
      #arrData: array:7 [?
        

        
    "status" => "application"
        

      
    ]
      
    #arrModified: []

    #2:
    PHP-Code:
    App\Model\ProjectDetailModel {#1207 ?
      #arrData: array:7 [?
        

        
    "status" => "confirmed"
        

      
    ]
      
    #arrModified: array:1 [?
        
    "status" => "application"
      
    ]

    #3:
    PHP-Code:
    App\Model\ProjectDetailModel {#1207 ?
      #arrData: array:7 [?
        

        
    "status" => "confirmed"
        

      
    ]
      
    #arrModified: array:1 [?
        
    "status" => "application"
      
    ]

    #4:
    PHP-Code:
    App\Model\ProjectDetailModel {#1207 ?
      #arrData: []
      #arrModified: array:1 [?
        
    "status" => "application"
      
    ]

    Ich hab schon versucht direkt nach save() ein dd zu machen und in der Datenbank den Wert geprüft – ebenfalls ohne Erfolg.
    ProjectDetailModel wird versioniert – eine neue Version wird auch nicht erstellt.

    Noch zur Ergänzung die die Klasse in dem die Methode liegt:

    PHP-Code:

    <?php

    declare(strict_types=1);

    namespace 
    App\Controller;

    use 
    Contao\Message;
    use 
    Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use 
    Symfony\Component\HttpFoundation\Response;
    use 
    Symfony\Component\Routing\Annotation\Route;
    use 
    Symfony\Component\HttpFoundation\Request;
    use 
    Symfony\Component\HttpFoundation\RedirectResponse;
    use 
    Doctrine\DBAL\Connection;

    class 
    RouteController extends AbstractController
    {

        public function 
    __construct()
        {
        }

        
    #[Route('/exampleroute', name: 'exampleroute_name', defaults: ['_scope' => 'backend', '_token_check' => false])]
        
    public function confirmDetailmember(Request $requestConnection $connection): Response
        
    {
            

        
    }
    }
    Der Aufruf der Methode erfolgt aus dem Backend heraus.
    Mir fällt nichts mehr ein. Gibt es irgendwas, was in save das Schreiben verhindern könnte, ohne dass ein Fehler geschmissen wird?
    Geändert von basistom (08.04.2024 um 06:55 Uhr)

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.126
    Partner-ID
    10107

    Standard

    Ich denke da wirst du tiefer debuggen müssen.
    » sponsor me via GitHub or PayPal or Revolut

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •