laravel雄辩不回复任何数据

时间:2016-09-08 12:25:08

标签: laravel eloquent laravel-5.2

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-&gt; organizations-&gt; organization_name}}不会返回数据???

2 个答案:

答案 0 :(得分:2)

您的代码中存在许多错误:

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

这真的是一个单一的组织,或者你输入你的关系感到困惑?

第二名:这可能是导致您出现问题的原因:

@foreach($agency as $agency)

您对阵列和项目使用相同的变量名称。

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

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

$agency->organizations会出错的原因!

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

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. 模型和其他值变量应该命名为单数
  3. 这可以防止你再犯这个错误。

    另一个建议:

    Laravel遵循PSR-0(自动加载)和PSR-2(编码式)标准。

    这为您提供了编写代码的方法。

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

答案 1 :(得分:0)

@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