首页 > 解决方案 > 试图获取非对象 Laravel 5,4 的属性

问题描述

我是 Laravel 的新手。我只想问我的代码是否正确。我想在 Collection 文件夹中的 index.blade.php 中显示某个分配的楼层名称和该区域的建筑物。集合属于一个作业,作业属于一个区域。

我在 Collection index.blade.php 中的代码

@foreach ($collections as $collection)
  <tr>    
     <td>
         {{ $collection->assignment->area['floor'] }} Floor
         {{ $collection->assignment->area['building'] }}
     </td> 
  <tr>
@endforeach

该代码生成错误“尝试获取非对象的属性”。所以我在问正确的显示方式。

这里是模型

集合.php

public function assignment()
{
    return $this->belongsTo(Assignment::class);
}

赋值.php

public function collections()
{
    return $this->hasMany(Collection::class);
}
public function area()
{
    return $this->belongsTo(Area::class);
}

面积.php

public function assignments()
{
    return $this->hasMany(Assignment::class);
}

CollectionsController.php

public function index() //shows the table of the collections
{
    $collections = Collection::all();
    $disposals = Disposal::all();
    return view('collections.index', compact('collections', 'disposals'));
}

标签: phplaravellaravel-5.4

解决方案


“更新”:问题出在您这样打开它的未关闭的 tr 标签上,<tr><tr>但应该是<tr></tr>:D 就是这样,检查解决方案并告诉我它是否有效。但看看好的一面,你的代码现在更干净、更实用了:D

链接很糟糕:),尝试创建一个可以让您获得该区域的功能,否则......

或者您可以使用 withDefault 并返回相关模型的新实例

此外,您的数据库方案应如下所示:

收藏品

  • ID
  • assignment_id

作业

  • ID
  • area_id

laravel 默认文档

但对于你的例子,我可以这样做:

集合.php

public function assignment()
{
    return $this->belongsTo(Assignment::class)
        ->withDefault();
}

赋值.php

public function collections()
{
    return $this->hasMany(Collection::class);
}
public function area()
{
    return $this->belongsTo(Area::class)
        ->withDefault();
}

面积.php

public function assignments()
{
    return $this->hasMany(Assignment::class);
}

CollectionsController.php

public function index() //shows the table of the collections
{
    $collections = Collection::all();
    $disposals = Disposal::all();
    return view('collections.index', compact('collections', 'disposals'));
}

也用于:

@foreach ($collections as $collection)
  <tr>    
     <td>
         {{ $collection->assignment->area->floor }} Floor
         {{ $collection->assignment->area->building }}
     </td> 
  <tr/>
@endforeach

如果一切正常,但仍然没有结果,请检查数据本身是否存在,因此请检查集合是否有任何分配,或者返回分配的任何区域...


推荐阅读