Skip to main content

Eloquent Relationship Explained (ONE TO ONE)

One to one relationship:


Suppose you have two tables users and addresses:

Users table:
id,name,email

Addresses table:
id,name, user_id

In the address table the user_id will come from the users table. Be careful about the naming convention.

Your Model name is User so table name is users so to get id from users table to addresses table you have to write according to the model name in the field of address like user_id.


So to declare one-to-one relationship:
Just think that user can have only one address. So,  go to User model and write:

public function address(){
 return $this->hasOne('App\Address');
}

here as this is one to one we are using singular function name which is address().

Store:

$user->address()-> save($address);

[Here, $user is finding the user by id, and $address is saving the requested address]

Show:
To show the address name

$user->address->name;

Update:
$address = Address::whereUserId(1)->first();
$address->name="Feni, Bangladesh";
$address->save();

Delete:
To delete address:

$user-> address()-> delete();

Thanks for reading.

Comments

Popular posts from this blog

SQL: sneak peek

show databases; use mysql; show tables; select * from component; describe component; create database sql_intro; show databases; use sql_intro; create table emp_details (Name varchar(25), Age int, gender char(1), doj date, city varchar(15), salary float); describe emp_details; insert into emp_details  values("Jimmy",35,"M","2005-05-30","Chicago",70000), ("Shane",30,"M","1999-06-25","Seattle",55000), ("Marry",28,"F","2009-03-10","Boston",62000), ("Dwayne",37,"M", "2011-07-12","Austin", 57000), ("Sara",32,"F","2017-10-27","New York",72000), ("Ammy",35,"F","2014-12-20","Seattle",80000); select * from emp_details; select distinct city from emp_details; select count(name) as count_name from emp_details; select avg(salary) from emp_details; select name, age...

SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists

While migration to db you often face/might face this error which says the table name that you wrote is already exists in the database. so in that case one of the solutions that you can try is wrapping up your create schema with this: if(!Schema::hasTable('users')){ } Example: if (! Schema :: hasTable ( 'users' )){              Schema :: create ( 'users' ,  function  ( Blueprint   $table ) {                  $table -> bigIncrements ( 'id' );                  $table -> bigInteger ( 'role_id' )-> unsigned ()-> nullable ();                  $table -> foreign ( ' role_id ' )-> references ( 'id' )-> on ( 'roles' ) ...