Как передать данные в представление без использования оператора if и foreach в файле шоу? - PullRequest
1 голос
/ 13 апреля 2020

когда я смотрел YouTube Laravel С нуля [Часть 6] - Выборка данных с помощью Eloquent, и я видел, как он передавал данные для просмотра без использования оператора if и foreach, меня пытались, но не работали

public function show(todo $todo)
{
 $todo=todo::find($todo);
 return view('demo')->with('todo',$todo);
}

мой взгляд без оператора if и foreach

    @extends('layouts.app')
@section('content')
    {{$todo->note}}
@endsection

мой взгляд при использовании оператора if и foreach

@extends('layouts.app')
@section('content')
@if (count($todo) > 0)
    @foreach ($todo as $item)
        {{$item->note}}
    @endforeach
@endif

@endsection

и я получил ошибку

Property [note] does not exist on this collection instance

https://www.youtube.com/watch?v=emyIlJPxZr4&list=PLillGF-RfqbYhQsN5WMXy6VsDMKGadrJ-&index=6

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Причина, по которой свойство не существует, состоит в том, что результатом является коллекция вместо массива (см. В комментариях к оператору)

Итак, вы пытаетесь получить note из коллекции, которая выглядит например:

[
  {
    "id":1,
    "note":"to do one",
    "created_at":"2020-04-12 08:25:00",
    "updated_at":"2020-04-13 07:20:54",
    "description":"description for todo one"
  }
]

Когда вы вызываете $todo->note, вы ищете эту строку:

[
  { # <-- You're searching this line
    "id":1,
    "note":"to do one",
    "created_at":"2020-04-12 08:25:00",
    "updated_at":"2020-04-13 07:20:54",
    "description":"description for todo one"
  }
]

Таким образом, ваш код возвращает коллекцию вместо массива. Массив будет выглядеть следующим образом:

{ # <-- Starts with open curly bracket instead of open square bracket
  "id":1,
  "note":"to do one",
  "created_at":"2020-04-12 08:25:00",
  "updated_at":"2020-04-13 07:20:54",
  "description":"description for todo one"
}

Вам необходимо выяснить, почему он отправляет коллекцию.

По виду вашего кода я обнаружил потенциальную проблему с этим:

public function show(todo $todo) # <- What is 'todo $todo'?
{
 $todo=todo::find($todo);
 return view('demo')->with('todo',$todo);
}

Что такое todo $todo, вы вызываете функцию показа где-нибудь? По умолчанию Laravel отправляет этот идентификатор через веб-маршрут. Поэтому попробуйте обновить его следующим образом:

public function show($id) #<-- change this to '$id'
{
 $todo = Todo::find($id); #<-- Change this to '$id'
 return view('demo')->with('todo',$todo);
}

Дайте мне знать, если это разрешит это.

Редактировать: И вам действительно нужно исправить свою заглавную букву.

0 голосов
/ 14 апреля 2020
$todo=todo::find($todo)->first();
...