I've really tried to figure this out, but I can't.
I'm trying to add a new relation, and I'm either getting no error and it's not adding or I'm getting an error. My latest method of trying was this:
public function addRelationship(){
$newRelation = new Relationship;
$newRelation->contact_id = 1;
$newRelation->contact_id2 = 2;
$newRelation->relationship_type_id = 1;
$this->contact->relationships()->attach($newRelation);
//$this->contact->relationships()->attach($this->selected_relationship_type, ['contact_id' => 1, 'contact_id' => 2]);
}
Returns this error:
Illuminate \ Database \ QueryException PHP 8.2.4 9.51.0
SQLSTATE[HY000]: General error: 1 no such table: main.relationship_types
INSERT INTO "relationship" ("contact_id", "contact_id2") VALUES (1, ?)
I've tried other ways of attaching that didn't work either.
My files
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('relationship', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->foreignId('contact_id')
->references('id')->on('contacts')
->onDelete('cascade');
$table->foreignId('contact_id2')
->references('id')->on('contacts')
->onDelete('cascade');
$table->foreignId('relationship_type_id')
->references('id')->on('relationship_types');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('relationship');
}
};
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
class Contact extends Model
{
use HasFactory;
protected $guarded = [];
public function addresses()
{
return $this->hasMany(Address::class);
}
public function phones()
{
return $this->hasMany(Phone::class);
}
public function emails()
{
return $this->hasMany(Email::class);
}
public function relationships()
{
return $this->belongsToMany(Contact::class, 'relationship', "contact_id", "contact_id2")
->withPivot('relationship_type_id');
}
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Relationship_Type extends Model
{
use HasFactory;
public function relationship(): BelongsToMany
{
return $this->belongsToMany(Relationship::class);
}
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Relationship extends Model
{
use HasFactory;
public function contacts()
{
return $this->belongsToMany(Contact::class, "relationship")->withPivot('relationship_type_id');
}
}
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('relationship__types', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string("label")->default("");
$table->string("description")->default("")->nullable;
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('relationship__types');
}
};