2
votes

Laravel 5 supprime les propriétés de collection nulles

J'ai un modèle nommé estate et j'ai de nombreux champs dedans.

J'utilise une seule vue pour create et show code> dans le contrôleur respectif.

Pour ce faire dans la méthode create , j'ai créé une collection vide:

$estate = collect(new Estate);

Je souhaite supprimer toutes ces valeurs null lors de la création d'une collection vide, mais j'en ai besoin dans le contrôleur , mais si je le fais:

$estate = collect(new Estate);

$estate->id                  = null;
$contact->area_name          = null;
$contact->zone_name          = null;
$estate->tipologia           = null;
$estate->metratura           = null;
$estate->external_id         = null;
$estate->descrizione         = null;
$estate->piano               = null;
$estate->price               = null;
$estate->via                 = null;
$estate->zone_id             = null;
$estate->area_id             = null;
$estate->riscaldamento       = null;
$estate->condizione_immobile = null;
$estate->vista               = null;

sans aucune clé null cela donne une erreur La propriété [id] n'existe pas sur cette instance de collection. (et est en fait correcte). Comment les définir par défaut sur null?


2 commentaires

Vous pouvez initialiser les propriétés avec une chaîne vide plutôt nulle dans ce cas.


@ Mr.Web avez-vous essayé ma réponse?


3 Réponses :


0
votes

Essayez d'utiliser isset () . Comme ceci:

if(isset($estate->visita))
{
   doSomething();
}

Si vous en avez besoin dans un contrôleur, vous pouvez toujours faire ceci:

// Executing a function (example: doSomethingWith() or doNothing())
isset($estate->visita) ? doSomethingWith($estate->visita) : doNothing();

// Or set a value
$variable = isset($estate->visita) ? $estate->visita : 'string of text';

ou vous pouvez utiliser un instruction if plus courante:

isset($estate->vista) ? doSomething() : echo '...';


4 commentaires

J'en ai besoin dans le contrôleur


Que pensez-vous, @ Mr.Web?


Je pense que ce n'est pas ce que j'ai demandé. Voulez-vous essayer de relire la question? Tks


Je pense que vous essayez de réaliser quelque chose qui n'est tout simplement pas là. Si une valeur était null , au moins la clé existerait. Mais ce n'est ni le cas. Par conséquent, je crois que isset () est votre meilleure solution atm. Ou du moins, dans la mesure de mon expertise.



-2
votes

essayez d'utiliser vide comme ceci:

foreach($estate as $e)
{
   if($e == null)
   {
       unset($estate[$s]);
   }
}

si vous voulez faire cela dans le contrôleur

@if(!empty($estate->piano)) //do_someThisng    @else //do_something_or_nothing    @endif

J'espère que ce code fonctionne pour vous, je l'ai utilisé pour autre chose mais similaire à votre travail, mais je ne sais pas si cela fonctionne de cette façon ou non.


1 commentaires

J'en ai besoin dans le contrôleur



1
votes

Vous pouvez essayer d'utiliser un filtre:

$filteredEstate = $estate->filter(function($value, $key) {
    return  $value != null;
});


4 commentaires

Salut, cela ne fonctionne pas, il renvoie la même erreur que "id" (par exemple) n'est pas défini ...


@ Mr.Web pourquoi voulez-vous supprimer NULL ? Vous pouvez le remplacer facilement dans votre contrôleur. Quelle est la raison pour laquelle tu veux faire ça?


Au lieu d'avoir à définir toutes ces clés sur null , je voulais une méthode pour renvoyer ANY key sur null dans cette partie du contrôleur. C'est tout. $ estate-> myfriend n'existe pas, il devrait donc renvoyer null au lieu d'erreur.


@ Mr.Web vérifiez flatMap () ici https://laravel.com/docs/5.7/collections#creating-collection‌ s