【问题标题】:Laravel 6: trying to get property of non-objectLaravel 6:试图获取非对象的属性
【发布时间】:2020-03-03 17:02:12
【问题描述】:

错误:试图获取非对象的属性“gender_id”

控制器:

public function printreports(Request $request)
{
$id = $request->get('select2'); //eg. id=1
$teachers = DB::table('teachers')->find($id);
return view('teachers.report1',compact('teachers'));
}

查看:

@foreach($teachers as $teacher)
{{$teacher->gender_id}}
@endforeach

如果我通过替换以下查询来使用 Eloquent 执行此操作,它可以工作,但我想使用如上所述的 DB 查询来执行此操作。

$teachers = Teacher::find($id);

【问题讨论】:

  • 通过dd查找返回的数据列表,eloquent返回数组中的数组列表,再返回数据列表。
  • 您正在获取单个记录,因此无需循环
  • 使用 DB 外观时显示屏幕 dd $teachers
  • 如果你只想要 1 位老师,按 id,你为什么将它命名为 teachers ......你试图再次迭代一个对象,这将迭代公共属性 ..你不'没有收藏
  • 数组中的一个 id ... 将数组传递给 find on Model 会导致它像您试图找到许多一样处理它,这将返回一个 Collection ... 结束打电话给findMany

标签: laravel laravel-5 laravel-6


【解决方案1】:

在使用find() 时,您不需要使用foreach

 @if(sizeof($teachers))
 {{$teachers->gender_id}}
 {{$teachers->gender_id}}//whatever field you need to display
 {{$teachers->gender_id}}//whatever field you need to display

 @endif

如果你使用get()

$teachers = DB::table('teachers')->where('id','=',$id)->get();

@if(sizeof($teachers))
@foreach($teachers as $teacher)
 {{$teacher->gender_id}}
 {{$teacher->gender_id}}//whatever field you need to display
 {{$teacher->gender_id}}//whatever field you need to display

@endforeach
@endif

【讨论】:

  • gender_id 只是一个例子,我有列列表。和身份证。
【解决方案2】:

你需要使用where,然后你就会有collection。

$teachers = DB::table('teachers')->where('id', $id)->get();

当你使用 find 时,你只有一个项目

【讨论】:

  • 谢谢你成功了。请问这是什么问题。
  • 当您使用 DB::table('teachers')->find($id) 时,它返回单个模型或 null。但是当您使用 where() 和 ->get() 时,它会返回集合模型。当您尝试 foreach 单个模型时,您会获取您建模的公共属性并在将属性用作对象时出现错误
  • 谢谢你,你能告诉我为什么它只返回一个id的数据吗?我正在从选择中传递多个 id。
  • $id - 是带有 id 的数组吗?
  • 好的,只要使用 whereIn DB::table('teachers')->whereIn('id', $id)->get();
【解决方案3】:

$teachers = DB::table('teachers')->find($id); 将返回单个模型或 null,请尝试使用 $teachers = DB::table('teachers')->get();

【讨论】:

    【解决方案4】:

    如果您想返回集合以查看,请使用get() 方法,如下所示:-

    public function printreports(Request $request)
    {
    $id = $request->get('select2'); 
    $teachers = DB::table('teachers')->where('id', $id)->get();
    return view('teachers.report1',compact('teachers'));
    }
    

    【讨论】:

      猜你喜欢
      • 2020-05-04
      • 1970-01-01
      • 2015-09-22
      • 2017-03-20
      • 2014-03-25
      • 2015-01-25
      • 2014-06-23
      • 1970-01-01
      相关资源
      最近更新 更多