Search code examples
laravelmany-to-many

BadMethodCallException: Trying to list all partners with the categories laravel


I'm experiencing the following: Goal: I would like to list all partners and the categories they belong to. Basically, it's a many to many relationship.

Below is the code: Partner Categories Table Migration

 public function up()
  {
    Schema::create('partcats', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('partcatnameP')->unique();
        $table->unsignedBigInteger('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');
        $table->timestamps();
    });
  }

Partners Table Migration

    public function up()
   {
    Schema::create('partners', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('partnername');

        $table->string('regnumber')->unique();

        $table->unsignedBigInteger('activestatus_id')->unsigned();
        $table->foreign('activestatus_id')->references('id')->on('activestatuses');

        $table->unsignedBigInteger('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');
        $table->timestamps();
    });
  }

Partner_Category Migration

    public function up()
{
    Schema::create('partner_partcat', function (Blueprint $table) {
        $table->bigIncrements('id');

        $table->unsignedBigInteger('partner_id')->unsigned();
        $table->foreign('partner_id')->references('id')->on('partners')->onDelete('cascade');



$table->unsignedBigInteger('partcat_id')->unsigned();
            $table->foreign('partcat_id')->references('id')->on('partcats')->onDelete('cascade');


        $table->timestamps();
    });
}

Models are as shown below:

Partcat Model

public function partners()
{
    return $this->belongsToMany('App\Partcat','partner_partcat');
}

Partner Model

 public function partcats()
{
    return $this->belongsToMany('App\Partcat','partner_partcat');
}

and the Partners Controller is as shown below:

    public function index()
{
    //
    $partners = Partner::all()->partcats();

  // dd(Partner::all()->partcats());

    return view('partners.index',['partners'=>$partners]);

}

This is where I'm trying to retrieve the list of partners and its related categories. However, I get a BadMethod call error.


Solution

  • You can use the following method

    $partners = Partner::with('partcats')->get();
    

    https://laravel.com/docs/5.6/eloquent-relationships#eager-loading