Как вывести данные таблицы из контроллера для просмотра? - PullRequest
0 голосов
/ 23 мая 2019

Я нахожусь на начальных стадиях попыток разобраться в Laravel и испытываю трудности с отображением «объекта сбора света», передаваемого лезвию от контроллера.

Мой print_r выводит «Illuminate \ Support \ Collection Object ([items: protected] => Array ()) 1», что, как я думал, означало, что он видит один элемент в массиве (только одну запись в таблице в настоящее время) , но я нажимаю на утверждение @else, так что я предполагаю, что оно на самом деле пустое. Я не получаю ошибок, но мне не удалось отобразить что-либо из $ products, несмотря на то, что $ title выводил просто отлично.

public function shop(){
        $products = DB::table('products')->get();
        $data = array(
            'title'=>'Shop',
            'products' => $products
        );
        return view('pages.shop')->with($data);
    }
@section('content')
    <h1>{{$title}}</h1>
    {{ print_r($products) }}
    @if($products->count())
        <ul class="list-group">
            @foreach($products as $product)
                <li class="list-group-item">{{$product->title}}</li>
            @endforeach
        </ul>
    @else
        <p>No products</p>
    @endif
@endsection

Почему мой массив пуст?

Ответы [ 5 ]

1 голос
/ 24 мая 2019

Попробуйте это ..........

public function shop()
    {
        $products   = DB::table('products')->get();
        $title      = "Shop";
        return view('pages.shop', compact('products', 'title'));
    }

@section('content')
    <h1>{{ isset($title) ? $title : '-' }}</h1>
    @if($products->count())
        <ul class="list-group">
            @foreach($products as $product)
                <li class="list-group-item">{{ isset($product->title) ? $product->title : '-' }}</li>
            @endforeach
        </ul>
    @else
        <p>No products</p>
    @endif
@endsection
1 голос
/ 24 мая 2019

На вашем контроллере :

$title = 'Shop';
$products = DB::table('products')->get();

return view('pages.shop', compact('title', 'products');

На вашем Blade :

Я бы также предложил поместить ваш неупорядоченный тег списка <ul> вне цикла, затем используйте @forelse для более чистого кода, например:

@section('content')
  <h1>{{$title}}</h1>
  <ul class="list-group">
    @forelse($products as $product)
       <li class="list-group-item">{{$product->title}}</li>        
    @empty
       <li class="list-group-item">No products</li>  
    @endforelse
  </ul>
@endsection
0 голосов
/ 24 мая 2019

Передавая $ view и $ title, я предпочитаю использовать компактный очиститель.

$title = 'shop';
$products = DB::table('products')->get();


return view('pages.shop', compact('title', 'products');

Тогда, по вашему мнению, вы можете ссылаться на них напрямую.Как вы делаете сейчас.

@section('content')
    <h1>{{$title}}</h1>

    @if($products->count())
        <ul class="list-group">
            @foreach($products as $product)
                <li class="list-group-item">{{$product->title}}</li>
            @endforeach
        </ul>
    @else
        <p>No products</p>
    @endif
@endsection
0 голосов
/ 24 мая 2019

В вашем контроллере

$title = 'shop';
$products = DB::table('products')->get();
return view('pages.shop', compact('title', 'products');
OR
$products = DB::table('products')->get();
$data = array(
        'title'=>'Shop',
        'products' => $products
);
return view('pages.shop')->with('data',$data);

В твоем клинке

@section('content')
<h1>{{$title}}</h1>
@if(count($products))
    <ul class="list-group">
        @foreach($products as $product)
            <li class="list-group-item">{{$product->title}}</li>
        @endforeach
    </ul>
@else
    <p>No products</p>
@endif
@endsection
0 голосов
/ 24 мая 2019

Вы можете отобразить данные, сначала передав их в виде массива в представление

return view('pages.shop')->with('data', $data);

тогда в клинке

@section('content')
    <h1>{{$data['title']}}</h1>
    @if(count($data['products']))
        <ul class="list-group">
            @foreach($data['products'] as $product)
                <li class="list-group-item">{{$product->title}}</li>
            @endforeach
        </ul>
    @else
        <p>No products</p>
    @endif
@endsection
...