代码之家  ›  专栏  ›  技术社区  ›  DaFois Jeet Patel

Laravel Blade创建逗号分隔列表

  •  0
  • DaFois Jeet Patel  · 技术社区  · 6 年前

    我有这个前臂:

    @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
    

    在每一项后面加一个逗号,而不是在最后一项之后。我认为代码是正确的,但它不起作用,我不知道为什么。

    编辑 这是控制器的一部分 $ProdottoAccessori

    $ProdottoAccessori = App\Product::has('accessori')->with([
        'productsLang',
          'accessori' => function ($query)  use ($array_prod_id){
              $query->with([
                'accessoriLang'
              ]);
           }
        ])->get();
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Sebastian Sulinski    6 年前

    好吧-我想说的是:

    在视图之外(无论是在控制器中还是在任何处理它的类中),然后将其注入视图,您可以执行以下操作:

    $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
    
        2
  •  1
  •   FULL STACK DEV    6 年前

    您可以尝试使用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
    

    希望这有帮助

        3
  •  0
  •   DaFois Jeet Patel    6 年前

    这就是解决方案。感谢@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>