Ci-dessous mon code de contrôleur Laravel
[
{
"id": 11,
"parent_id": 0,
"name": "Category 1",
"children": [
{
"id": 63,
"parent_id": 11,
"name": "Category 2",
"children": [
{
"id": 73,
"parent_id": 63,
"name": "Category 3"
}
]
},
{
"id": 77,
"parent_id": 11,
"name": "Category 5",
"children": [
{
"id": 83,
"parent_id": 77,
"name": "Category 8"
}
]
}
]
}
]
Ici, la sortie de la méthode ci-dessus;
[
{
"id": 11,
"parent_id": 0,
"name": "Category 1"
},
{
"id": 63,
"parent_id": 11,
"name": "Category 2"
},
{
"id": 73,
"parent_id": 63,
"name": "Category 3"
},
{
"id": 77,
"parent_id": 11,
"name": "Category 5"
},
{
"id": 83,
"parent_id": 77,
"name": "Category 8"
}
]
Maintenant, je veux formater cette réponse base sur la valeur de parent_id .
La condition est: lorsque parent_id est égal à id , alors le parent_id est considéré comme des enfants de id.
Veuillez noter que les deux parent_id et id sont stocké sous forme de valeurs incrémentielles.
Je souhaite modifier et renvoyer la réponse comme ci-dessous;
public function templateValueData($template_id)
{
$parent = TemplateMetadataValue::where('template_id', $template_id)->get();
return $parent;
}
Comment puis-je y parvenir?
p>
3 Réponses :
Vous devez appeler votre relation sur votre contrôleur:
public function templateValueData(TemplateMetadataValue $template)
{
return $template->load('children')->get();
}
Vous pouvez également utiliser l'injection de méthode sur vos méthodes de contrôleur, vous pouvez donc utiliser ce code:
public function templateValueData($template_id)
{
$parent = TemplateMetadataValue::where('template_id',$template_id)->with('children')->get();
return $parent;
}
Si vous modifiez légèrement votre modèle TemplateMetadataValue , vous pouvez obtenir le résultat souhaité.
$parent = TemplateMetadataValue::with('children')->get();
Appelez-le avec la méthode children .
class TemplateMetadataValue extends Model {
public function children() {
return $this->hasMany(static::class, 'parent_id');
}
}
Le reste de la connexion que vous pouvez appliquer ici avec votre générateur de requêtes.
Cela donnera des résultats comme `[{" id ": 11," parent_id ": 0," name ":" Category 1 "," children ": [{" id ": 63," parent_id ": 11," name " : "Catégorie 2",}, {"id": 77, "parent_id": 11, "name": "Catégorie 5",}]}] `
Utilisez le code ci-dessous pour obtenir votre réponse.
function xyz($parents,$parent_id = 0){
$res = [];
foreach ( $parents as $parent ) {
if ( $parent[ "parent_id"] == $parent_id ){
$children = $this->xyz($parents, $parent[ "id"]);
if ($children) {
$parent[ "children"] = $children;
}
$res[]=$parent;
}
}
return $res;
}
Fonction pour obtenir la réponse.
public function templateValueData($template_id)
{
$parents = TemplateMetadataValue::where('template_id', $template_id)->get();
$arr = $this->xyz($parents);
return $arr;
}