【问题标题】:Trying to get property 'dept_name' of non-object Laravel 5.8试图获取非对象 Laravel 5.8 的属性“dept_name”
【发布时间】:2019-12-31 04:22:13
【问题描述】:

我想知道为什么我的 laravel 刀片文件中出现错误“尝试获取非对象”。

刀片文件中的代码

@foreach($calls as $call)
<tr>
 @if($call->counter_id === null)
 <td>{{ $call->department->dept_name }}</td>                
 <td>{{ $call->transaction->trans_name }}</td>
</tr>
@endforeach

调用模型

public function call()
{
    return $this->hasMany('App\Call');
}

部门模型

public function department()
{
    return $this->belongsTo('App\Department');
}

控制器

public function index()
{
    $calls = Call::all();

    return view('test', ['calls' => $calls]);
}

该代码似乎是正确的。我在我的模型中提供了关系。我只是想知道为什么会出现这种错误,因为我也在弄清楚为什么。

【问题讨论】:

  • 您可以调试它,首先关闭 @endif ,就好像您说您的关系设置正确尝试 dd($call-&gt;department) 并注释下面的所有其他代码(在 @foreach 循环内),如果你得到收集作为回报,那么你需要检查列名,否则你的关系不正确,现在我建议,总是先从控制器检查,然后再进入控制器中的刀片 dd($calls),是这是你的查询$calls = Calls::with(['department','transaction'])-&gt;get() ?
  • 尝试 dd 为您的对象它应该是空的 显示控制器中的 resquest 方法
  • @Vipertecpro 不,我的查询是 $calls = Call::all()。它适用于除此之外的其他文件
  • 请显示来电的型号。很可能是 App/Calls.php。
  • 请dd($calls);并检查 dept_name 是否存在于该对象中,如果不是,您必须在查询或数据库中进行一些更改。

标签: laravel laravel-blade laravel-5.8


【解决方案1】:

你需要调试看看到底出了什么问题。

试试

var_dump( $call);;
die;

dd($call);
die;

查看来自内部的内容作为 dept_name 。 如果您使用 dd,您将在 relations 标签中看到数据。 如果您没有看到部门之类的任何关系,那么您的模型设置不正确。 否则 可能是数据库列中的名称不匹配或未定义的属性 在模型类中。

【讨论】:

  • 在 laravel 中使用 dd() 时,无需给 die 或 exit,dd 自动退出代码
【解决方案2】:
in your controller make sure

$calls = Calls::with('department')->get();

return view('--your blade file--',compact('calls'));
}

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    相关资源
    最近更新 更多