Anirudha Mahadik
Anirudha Mahadik

Reputation: 53

How to get data for one to many relationship using Eloquent in Laravel?

How to get data for one to many relationship using Eloquent in Laravel? Actually I followed Eloquent Documentation. But my code returns me an empty array. Here's my work:

Database Schema

Parent Table: mtg_workspace with columns (mw_id[primary key], mw_name,..., mw_access)

Child Table: mtg_workspace_amenities with columns (id[primary key], wa_mwid, wa_name)

Model: MtgWorkspace.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class MtgWorkspace extends Model
{
  protected $table = 'mtg_workspace';
  public $timestamps = false;

  public function MtgWorkspaceAmenities(){
    return $this->hasMany('App\MtgWorkspaceAmenities', 'wa_mwid');
  }
}

Model: MtgWorkspaceAmenities.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class MtgWorkspaceAmenities extends Model
{
  protected $table = 'mtg_workspace_amenities';
  public $timestamps = false;

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

Controller: WorkspaceController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\MtgWorkspace;
use App\MtgWorkspaceAmenities;

class WorkspaceController extends Controller
{
    public function index()
   {
      $workspace = MtgWorkspace::with('MtgWorkspaceAmenities')->get();

      return $workspace;
    }
}

and here it shows following output:

enter image description here

Upvotes: 0

Views: 1700

Answers (1)

lagbox
lagbox

Reputation: 50561

Can you try defining the primary key for the MtgWorkspace model (as it is not id):

protected $primaryKey = 'mw_id';

I don't think it can match up the children MtgWorkspaceAmenities to the parent MtgWorkspace models as it is trying to use the id attribute on MtgWorkspace to match to the foreign key on MtgWorkspaceAmenities when it spins through the result of the eager loading.

Side Note:

You will have to pass more parameters to the inverse relationship on MtgWorkSpaceAmenities when defining it, as belongsTo() wants to use the calling methods name snake cased with _id added if not told otherwise as the key.

Upvotes: 1

Related Questions