【问题标题】:how to pass data to a view without using if statement and foreach in the show file?如何在显示文件中不使用 if 语句和 foreach 将数据传递给视图?
【发布时间】:2020-04-13 08:21:31
【问题描述】:

当我观看 youtube Laravel From Scratch [Part 6] - Fetching Data With 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

【问题讨论】:

  • 你能做return $todo;并提供结果吗?
  • 顺便说一句,他在视频中间同时使用了 if 语句和 foreach。
  • 在视频中11:51和12:01,他没有使用if语句和foreach,然后他刷新页面,它仍然得到数据
  • 这是两个不同的页面两个刀片文件,一个是显示所有帖子的索引,第二个是显示刀片文件,它显示单个帖子。所以你不需要 foreach 和 if。
  • 我尝试了相同的代码,但结果不一样

标签: php laravel-5 eloquent


【解决方案1】:

属性不存在的原因是因为结果是一个集合而不是一个数组(在 op cmets 中找到)

所以你试图从一个看起来像这样的集合中获取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 是什么,你在某处调用 show 函数吗?默认情况下,Laravel 通过 web 路由发送该 ID。所以尝试将其更新为:

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

如果解决了,请告诉我。

编辑:你真的需要修正你的大写。

【讨论】:

  • @MinhTrung 太棒了!听到这个消息我很高兴。请将此标记为正确答案,以帮助其他有相同问题的人。
【解决方案2】:
$todo=todo::find($todo)->first();

【讨论】:

  • 问题是show()函数,我不知道其他方法,直到我尝试了public function show(todos $todo) { return view('todolist.show',compact('todo')); }public function show($id) { $todo=todos::find($id); return view('todolist.show',compact('todo')); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 2022-11-23
  • 2019-11-01
  • 2017-01-06
相关资源
最近更新 更多