Skip to main content

Eloquent Relationship Explained (ONE TO MANY)

Suppose you have two tables:

users and posts tables.

users table includes:
id,name,email

posts table includes:
id,title,body,user_id

One to many relationship:

Go to User model and write:


public function posts(){
 return $this->hasMany('App\Post');
}

Look at the function naming convention. It's plural as it is one to many relationship.

Store:

$user->posts()->save($post);

Here, $user variable comes from findorfail($id). and $post variable has taken the
requested data from user. I haven't shown all of this in details here as it is only to
understand how one to many relationship actually works.


Show:
foreach($user->posts as $post){
   echo $post->title."<br>";
}

Update:
$user->posts()->where('id','=',2)->update(['title'=>'your updated title','body'=>'your updated body');

Delete:
$user->posts->whereId(1)->delete();

To delete all the users posts:
$user->posts->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' ) ...