2017-08-04 3 views
0

J'essaie d'enregistrer des données dans la table des commandes. Mais la méthode save renvoie NULL. J'ai donné les données aussi.Enregistrer() renvoyant NULL, ne pas enregistrer les données

Voici le code que j'essaie de faire.

$OrderData = [ 
    'order_name' => 56, 
    'order_status_id' => '2', 
    'order_date' => date('Y-m-d H:i:s'), 
    'order_address' => '', 
    'order_suburb' => '', 
    'order_state' => '', 
    'order_postcode' => '', 
    'order_country' => '', 
    'client_id' => 55 
]; 
$this->loadModel('Orders'); 
$orderData = $this->Orders->newEntity($OrderData, ['validate' => false]); 
debug($this->Orders->save($orderData));die; 
var_dump($this->Orders->save($orderData));die; 

Le débogage renvoie la valeur false. var_dump renvoie bool (false). Je ne peux même pas vérifier la requête SQL générée par le gâteau ORM, car la méthode save n'est pas un objet. J'essaye de faire ceci à partir du Logins Controller. $ orderData est une entité avec des données, elle n'est pas nulle.

+1

Avec 'pr()' vous ne pouvez pas faire la différence entre 'null',' false' et ' '''. Utilisez 'debug()' pour le résultat ainsi que l'entité après avoir appelé 'save()'. – ndm

+0

debug(), me renvoie false. Qu'est-ce que je devrais faire maintenant? BTW pouvez-vous me dire s'il vous plaît la quelle est la cause en regardant les codes? @ndm –

+2

Comme suggéré, déboguez l'entité après avoir appelé 'save()'. Si aucune erreur n'est détectée, inspectez les requêtes SQL générées. – ndm

Répondre

0

Dans CakePHP ['validate' => false], ne validera pas vos champs (champs qui sont nécessaires ou la mise à jour Lors de la création) simples, on peut dire validationDefault() ne validera pas validations mais validera les buildRules() règles (les règles existent dans et règles uniques). Alors que je recevais une erreur à cause de mon client_id n'avait pas existé dans la table Clients.

Je déboguée mon code en utilisant la méthode errors(), comme $orderData->errors();

-1

essayez ceci:

$OrderData = [ 
    'order_name' => 56, 
    'order_status_id' => '2', 
    'order_date' => date('Y-m-d H:i:s'), 
    'order_address' => '', 
    'order_suburb' => '', 
    'order_state' => '', 
    'order_postcode' => '', 
    'order_country' => '', 
    'client_id' => 55 
]; 
$this->loadModel('Orders'); 
$saveData = $this-> Orders->newEntity(); 
$saveData = $this-> Orders->patchEntity($saveData, $OrderData); 
$saveData = $this-> Orders->save($saveData); 
+0

C'est ce que j'ai déjà fait. Cela ne fonctionne pas. –

+0

ok quel est votre problème? les données ne sont pas enregistrées correctement ou autre chose. –

+0

Les données ne sont pas enregistrées et ma méthode de sauvegarde retourne les données booléennes non objet. –

1

Essayez debug($orderData->getErrors()); juste pour vous assurer qu'il n'y a aucune erreur de validation sur l'objet de l'entité.

OU

Utilisation erreur() directement à l'entité, comme pr($orderData->errors());die;. Cependant la méthode $entity->errors() est obsolète depuis 3.4.0 et devrait être remplacée par $entity->getErrors().

+0

Veuillez noter cette ligne $ this-> Orders-> newEntity ($ OrderData, ['validate' => false]); dans mon code de référence. –

+0

Ouais j'ai vu la ligne :) Cependant, je me souviens d'avoir eu un problème similaire et j'ai découvert qu'une règle de validation que j'avais avait été traitée par la méthode save, pas par la méthode newEntity. Au moins autant que je m'en souvienne. Donc je me suis habitué à toujours déboguer $ entity-> getErrors() dans le cas où une méthode de sauvegarde retourne false. – Simon

+1

Il y a des règles de validation (temps de triage) et des règles d'application (gain de temps), ce dernier pouvant utiliser l'ancien @ bikash.bilz – ndm