Laravel: error in many to many relationship

Viewed 52

in my laravel app I have a many to many relationship for Tag and VenueReview models, I created pivot table and came up with the proper relationships like I alsways do (I think) but I'm getting the following error when I try to get all Tags with Tag::all() method.

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'venuereviews.tag_id' in 'where clause' (SQL: select * from `venuereviews` where `venuereviews`.`tag_id` = 1 and `venuereviews`.`tag_id` is not null)\

Tag relationship:

public function venuereviews()
    {
        return $this->belongsToMany('App\Models\VenueReview', 'tag_venuereview', 'tag_id', 'venuereview_id')->withTimeStamps();
    }

VenueReview relationship

public function tags()
    {
        return $this->belongsToMany('App\Models\Tag', 'tag_venuereview', 'venuereview_id', 'tag_id');
    }

Pivot table migration:

Schema::create('tag_venuereview', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedInteger('venuereview_id')->index()->nullable();
            $table->foreign('venuereview_id')->references('id')->on('venuereviews')->onDelete('cascade')->onUpdate('cascade');
            $table->unsignedInteger('tag_id')->nullable()->index();
            $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade')->onUpdate('cascade');
            $table->timestamps();
        });

Thanks in advance!

1 Answers

You Need to change places for 'venuereview_id' and 'tag_id' keys... Forign key should be first.

public function venuereviews()
{
    return $this->belongsToMany('App\Models\VenueReview', 'tag_venuereview', 'venuereview_id', 'tag_id')->withTimeStamps();
}

public function tags()
{
    return $this->belongsToMany('App\Models\Tag', 'tag_venuereview', 'tag_id', 'venuereview_id');
}
Related