laravel eloquent 未返回任何数据

laravel eloquent not returning any data

agency.php

class agency extends Model
{
    protected $table = 'agency';

    public function organizations()
    {
        return $this->belongsTo('\App\model\organization');
    }
}

agencyController.php

$agency = \App\model\agency::with('organizations')->get();

agency.blade.php

@foreach($agency as $agency)
<tr>
  <th>{{$agency['id']}}</th>
  <th>{{$agency['agency_name']}}</th>
  <th>{{$agency['linked_organization_id']}}</th>
  <th>{{$agency['created_at']}}</th>
  <th>{{$agency['updated_at']}}</th>
  <th>{{$agency->organizations->organization_name}}</th>
</tr>
@endforeach

错误

正在尝试获取 属性 的非对象

为什么 {{$agency->organizations->organization_name}} 没有 return 数据???

你的代码有很多错误:

1st: 为什么关系名称是 organization>s<(复数)如果它 指的是单个组织?

这真的是一个组织,还是您混淆了您的关系?

第二个: 这可能是您问题的原因:

@foreach($agency as $agency)

您对数组和项使用了相同的变量名。

通过这样做,在第一个 foreach 迭代中,您将拥有一个模型,很好。但是您已经用模型替换了 "foreached" 数组。

现在在后续迭代中,foreach 将迭代模型的属性。

那为什么$agency->organizations会报错!

第三:(新)您的组织关系错误

public function organizations()
{
    return $this->belongsTo('\App\model\organization');
}

使用这种方式,Laravel 假定您的外键是 organizations_id。但是在你的代码中,我看到你的外键是 linked_organization_id。所以你必须指定外键名称!

public function organizations()
{
    return $this->belongsTo('\App\model\organization', 'linked_organization_id');
}

我的建议:

  1. 数组/集合变量应该命名为复数
  2. Model 和其他值变量 SHOULD 命名为 singular.

这将防止您再次犯同样的错误。

另一个建议:

Laravel 遵循 PSR-0 (autoload) and PSR-2(编码风格)标准。

这为您应该如何编写代码提供了很多方向。

我看到您的 类 名称使用 lowerCamelCase,但 PSR-2 默认使用 upperCamelCase

尝试

@foreach($agencies as $agency)
<tr>
  <th>{{$agency['id']}}</th>
  <th>{{$agency['agency_name']}}</th>
  <th>{{$agency['linked_organization_id']}}</th>
  <th>{{$agency['created_at']}}</th>
  <th>{{$agency['updated_at']}}</th>
  <th>{{$agency->organizations()->organization_name}}</th>
</tr>
@endforeach