You'll only need to define one function:
# Customer.php
public function spouse()
{
return $this->hasOne('App\Customer');
}
Then, when link the objects, relate the objects with each other:
# CustomersController.php
$person_a = Customer::find(1);
$person_b = Customer::find(2);
$person_a->spouse()->save($person_b);
$person_b->spouse()->save($person_a);
Then to use it:
# CustomersController.php
$person_a = Customer::find(1);
$person_b = $person_a->spouse;
$person_a = $person_b->spouse;
Observation
When defining a relationship with a foreign key different to {model}_id
, you need to specify it when defining the relationship (check the docs):
# Customer.php
public function spouse()
{
return $this->hasOne('App\Customer', 'spouse');
}
Also, this foreign key column needs to be unsignedInteger()
(in case of the primmary key is a integer
) or bigUnsignedInteger()
in case the foreign primmary key is bigInteger
:
If:
$table->increments('customerId');
do:
$table->unsignedInteger('spouse')->nullable();
$table->foreign('spouse')->references('customerId')->on('customers');
Or, if:
$table->bigIncrements('customerId');
do:
$table->unsignedBigInteger('spouse')->nullable();
$table->foreign('spouse')->references('customerId')->on('customers');