Sunday, April 2, 2017

Laravel 5.4 hasManyTrough 'Call to undefined method Illuminate\Database\Query\Builder::hasManyTrough()'

I am struggling to see, where I went wrong. It seams easy, I followed Laravel instructions https://laravel.com/docs/5.4/eloquent-relationships#has-many-through , but clearly I need someone more familar with this sort of code as whenever I try to fetch $stagingsystem-stagesubtype I get error

BadMethodCallException with message 'Call to undefined method >Illuminate\Database\Query\Builder::hasManyTrough()'

Can someone help?

StagingSystems

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateStagingSystemsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('staging_systems', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name')->unique();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('staging_systems');
    }
}

StageName

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateStageNamesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('stage_names', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('staging_system_id')->unsigned();
            $table->foreign('staging_system_id')->references('id')->on('staging_systems');

            $table->string('name')->unique;
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('stage_names');
    }
}

StageSubType

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateStageSubTypesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('stage_sub_types', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('stage_name_id')->unsigned();
            $table->foreign('stage_name_id')->references('id')->on('stage_names');
            $table->string('name');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('stage_sub_types');
    }
}

MODELS

StagingSystem

<?php

namespace App;

use App\StagingSystem;
use Illuminate\Database\Eloquent\Model;

class StagingSystem extends Model
{
    protected $guarded = ['id'];

    public function stagename()
    {
        return $this->hasMany('App\StageName');
    }

    public function stagesubtype()
    {
        return $this->hasManyTrough('App\StageSubType','App\StageName');
    }

}

StageName

<?php

namespace App;

use App\StageName;
use Illuminate\Database\Eloquent\Model;

class StageName extends Model
{
  protected $guarded = ['id'];

    public function stagingsystem()
    {
        return $this->belongsTo('App\StagingSystem','id');
    }

    public function stagesubtype()
    {
        return $this->hasMany('App\StageSubType');
    }

}

StageSubType

<?php

namespace App;

use App\StageSubType;
use Illuminate\Database\Eloquent\Model;

class StageSubType extends Model
{
      protected $guarded = [
        'id'
    ];

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

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


}



via rpz

Advertisement