Question: I'm new in Laravel. I just want to ask if my code is correct. I want to display the the name of the floor and building of the area from a certain assignment in index.blade.php in Collection folder. Collections belong to an Assignment, and Assignments belongs to an Area. 

My code in Collection index.blade.php

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

```

That code generates an error "Trying to get property of non-object". So I'm asking the correct way of displaying it. 

Here are the models

Collection.php

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

```

Assignment.php

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

```

Area.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'));
}

```

Answer: 
> 
> "UPDATE": The problem is from the unclosed tr tag you opened it `<tr><tr>` like this but it should be `<tr></tr>` :D that's it, check the solution and tell me if it works. but look at the bright side, your code is cleaner and more pragmatic now :D 
> 
> 
> 

chaining is bad :), try to create a function that gets you the area or else...

or you can use withDefault and return a new instance of the related model

also, your database scheme should look like this:

**collections**

* id
* assignment\_id

**assignments**

* id
* area\_id

[laravel withDefault doc](https://laravel.com/docs/5.4/eloquent-relationships#default-models)

but for your example I could do:

Collection.php

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

```

Assignment.php

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

```

Area.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'));
}

```

also for usage:

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

```

if everything is ok, and still no result, please check the data itself if it is exists, so check if there is any assignment for the collection, or any area for the assignment returned...
It is entirely possible that nearly any part of the following could be returning a `null`:

```
$collection->assignment->area

```

If the relationship from Collection to Assignment doesn't exist for this particular Collection there would be a `null` returned for it.
This would go for all `singular` relationships down the line.

You will need to check for these, figure out how to return some default in the case of `null`, or guarantee that the relationship always exists in the DB.