J'ai ceci pour chacun:

@foreach ($ProdottoAccessori as $prodotto)
    @if($scheda->id == $prodotto->id)
        @foreach($prodotto['accessori'] as $acc)
           @foreach($acc['accessoriLang'] as $accNome)
                <span>{!! $accNome->accessori !!}</span>{{ $loop->last ? '' : ', ' }}
            @endforeach
        @endforeach
    @endif
@endforeach

Cela mettrait une virgule après chaque élément mais pas après le dernier. Je pense que le code est correct mais cela ne fonctionne pas et je ne sais pas pourquoi.

MODIFIER Ceci est la partie contrôleur pour $ProdottoAccessori

$ProdottoAccessori = App\Product::has('accessori')->with([
    'productsLang',
      'accessori' => function ($query)  use ($array_prod_id){
          $query->with([
            'accessoriLang'
          ]);
       }
    ])->get();
0
DaFois 23 mai 2018 à 13:38

3 réponses

Meilleure réponse

Ok - alors voici ce que j'ai trouvé:

En dehors de la vue - que ce soit dans le contrôleur ou dans toute classe qui s'en chargerait - puis injectez-le dans la vue, vous procédez comme suit:

$products = $ProdottoAccessori->map(function($product) {
    $product->accessori = $product->accessori->map(function($accessori) {
        $accessori->accessoriLangString = '<span>'.$accessori->accessoriLang->pluck('accessori')->implode('</span>, <span>').'</span>';
        return $accessori;
    });
    return $product;
});

Maintenant, dans la vue, vous pouvez faire quelque chose comme ceci:

@foreach ($products as $prodotto)
    @if($scheda->id == $prodotto->id)
        @foreach($prodotto->accessori as $acc)
            {{ $acc->accessoriLangString }}
        @endforeach
    @endif
@endforeach

Vous pouvez également le faire de cette façon

@foreach ($products as $prodotto)
    @if($scheda->id == $prodotto->id)
        {{ $prodotto->accessori->pluck('accessoriLangString')->implode('') }}
    @endif
@endforeach
1
Sebastian Sulinski 23 mai 2018 à 12:03

Vous pouvez essayer laravel helper to array

collect($acc['accessoriLang'])->implode(',');

Si vous avez déjà un tableau, vous pouvez simplement utiliser.

$collection->implode(',')

Pour plus d'informations, consultez https://laravel.com/docs/5.6/collections

@foreach ($ProdottoAccessori as $prodotto)
    @if($scheda->id == $prodotto->id)
        @foreach($prodotto['accessori'] as $acc)

                <span>{!! collect($prodotto['accessori'])->implode(',') !!}</span>
        @endforeach
    @endif
@endforeach

J'espère que cela t'aides

1
Adnan Mumtaz 23 mai 2018 à 10:56

C'était la solution. Merci à @Sebastian Sulinski

Dans le contrôleur:

$ProdottoAccessori = App\Product::has('accessori')->with([
    'productsLang',
      'accessori' => function ($query)  use ($array_prod_id){
          $query->with([
            'accessoriLang'
          ]);
       }
    ])->get();

    $products = $ProdottoAccessori->map(function($product) {
        return $product->accessori->map(function($accessori) {
            $accessori->accessoriLangString = '<span>'.$accessori->accessoriLang->pluck('accessori')->implode(', ').'</span>';
            return $accessori;
        });
    });

Dans la vue:

@foreach ($ProdottoAccessori as $prodotto)
    @if($scheda->id == $prodotto->id)
        {{ $prodotto->accessori->pluck('accessoriLangString')->implode(', ') }}
    @endif
@endforeach

Je ne sais toujours pas pourquoi je dois imploser 2 fois mais ça marche.

Voici la sortie:

<span>cerchi in lega</span>, <span>alzacristalli</span>, <span>portapacchi</span>, <span>navigatore</span>
0
DaFois 23 mai 2018 à 12:18