Laravel Blade создать список через запятую - PullRequest
0 голосов
/ 23 мая 2018

У меня есть этот foreach:

@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

, который ставит запятую после каждого элемента, но не после последнего.Я думаю, что код правильный, но он не работает, и я не знаю почему.

EDIT Это часть контроллера для $ProdottoAccessori

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

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Хорошо - вот что я придумала:

Вне поля зрения - либо внутри контроллера, либо в любом классе, который позаботится об этом, - затем добавьте его в представление, вы все равно делаетеследующее:

$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;
});

Теперь в представлении вы можете сделать что-то вроде этого:

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

В качестве альтернативы вы также можете сделать это следующим образом

@foreach ($products as $prodotto)
    @if($scheda->id == $prodotto->id)
        {{ $prodotto->accessori->pluck('accessoriLangString')->implode('') }}
    @endif
@endforeach
0 голосов
/ 23 мая 2018

Это было решение.Спасибо @Sebastian Sulinski

В контроллере:

$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;
        });
    });

В представлении:

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

Я до сих пор не знаю, почему я должен взорваться 2 разано это работает.

Это вывод:

<span>cerchi in lega</span>, <span>alzacristalli</span>, <span>portapacchi</span>, <span>navigatore</span>
0 голосов
/ 23 мая 2018

Вы можете попробовать laravel helper для массива

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

Если у вас уже есть массив, вы можете просто использовать.

$collection->implode(',')

Для получения дополнительной информации посмотрите 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

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...