2017-10-13 3 views
0

J'ai mis à niveau vers Laravel 5.5 et Voyager 1.0 et j'utilise mysql sur une boîte vagabonde.Impossible de recréer DataRow pour la relation dans Laravel Voyager

Je souhaite ajouter une entrée dans la table data_rows pour une relation entre un utilisateur et un magasin. Je suis capable de créer l'entrée en utilisant le gui du Voyager.

creating relationship gui view of relationship Ce qui crée l'entrée de table correspondante enter image description here Quand je copie toutes ces valeurs dans mon semeuse

$dataRow = $this->dataRow($storeDataType, 'store_belongsto_user_relationship'); 
if (!$dataRow->exists) { 
    $dataRow->fill([ 
     'type'   => 'relationship', 
     'display_name' => 'Manager', 
     'required'  => 0, 
     'browse'  => 1, 
     'read'   => 1, 
     'edit'   => 1, 
     'add'   => 1, 
     'delete'  => 1, 
     'details'  => '{"model":"App\\User","table":"users","type":"belongsTo","column":"manager_id","key":"id","label":"email","pivot_table":"ad_store","pivot":"0"}', 
     'order'  => 20, 
    ])->save(); 
} 

et exécuter mes migrations db avec mes semoirs personnalisés, Si je recharge la page /database/stores/bread/edit Je reçois une erreur pour accéder à la propriété d'un non-objet déclenché sur cette ligne.

<?php if($relationshipDetails->type == 'belongsTo'): ?><?php echo e('flexed'); ?><?php endif; ?> 

Ce qui implique que le json stocké dans le champ de détails n'est pas valide. Je ne comprends pas comment cela peut être quand je l'ai copié dans mon semain mot pour mot. Y a-t-il une autre entrée ajoutée sur une autre table ou en cache que mon semoir ne prend pas en compte? J'ai parcouru les entrées db et je ne trouve rien d'évident.

EDIT

L'ajout de cette ligne en référence à la question que je l'ai découvert était pertinent au problème

@php $relationshipDetails = json_decode($relationship['details']); @endphp 

Répondre

0

Donc, c'était en quelque sorte stupide de ma part. Mon semeur insérait une chaîne que je définissais comme telle; "model":"App\\User", ce que je pensais était suffisant pour obtenir le caractère \ dans le db. Ce que c'est. Le problème est dans la dernière ligne que j'ai ajouté à la question. Lorsque cette fonction est appelée, elle tente de créer un objet json à partir de la chaîne dans la base de données. Malheureusement, il ne crée pas correctement l'objet json car le semoir a inséré la chaîne "model":"App\User" dans la base de données.

Pour résoudre ce problème, j'ai changé à la déclaration de chaîne dans la semeuse à

"model":"App\\\\User"

qui a inséré dans ma base de données

"model":"App\\User"

et quand il est passé json_decode il devient

"model": "App\User"

que ce soit une leçon importante dans les caractères d'échappement.