I have a table store, and store has many libraries, in library I have foreign key of store store_id
.
Store table
id(PK)
Library table
id(PK) store_id(FK)
I'm confused with hasMany
and belongsTo
parameters include, in the docs it says
return $this->hasMany('App\Comment', 'foreign_key');
return $this->hasMany('App\Comment', 'foreign_key', 'local_key');
return $this->belongsTo('App\Post', 'foreign_key', 'other_key');
Which table of hasMany foreign_key and local_key came from? Same with belongsTo which table of foreign_key and other_key came from?
Store model
public function library(){ return $this->hasMany('App\Library', 'what_foreign_key_should_be_here','what_other_key_should_be_here'); }
Library model
public function stores(){ return $this->belongsTo('App\Stores', 'what_foreign_key_should_be_here', 'what_other_key_should_be_here'); }
Because sometimes I change my primary key id of a table to other name like sid, so I always want to specify which is foreign key and primary key
The only difference between hasOne and belongsTo is where the foreign key column is located. Let's say you have two entities: User and an Account. In short hasOne and belongsTo are inverses of one another - if one record belongTo the other, the other hasOne of the first.
hasMany relationship in laravel is used to create the relation between two tables. hasMany means create the relation one to Many. For example if a article have comments and we wanted to get all comments of the article then we can use hasMany relationship .
Step 1: Download Laravel App. Step 2: Connect App to Database. Step 3: Create Model And Migration. Step 4: Set One To Many Relationship.
The hasMany() function returns an Illuminate\Database\Eloquent\Relations\HasMany object. So, when you call $user->websites() , this will return the HasMany relationship object. Wherever you are using this function, you are then trying to convert that result to a string, which is the error you're seeing.
To simplify the syntax, think of the return $this->hasMany('App\Comment', 'foreign_key', 'local_key');
parameters as:
id
column of the current table (unless you are specifying the third parameter, in which case it will use that)id
column of the current tableIn your circumstance, because you have used store_id
in the libraries
table, you've made life easy for yourself. The below should work perfectly when defined in your Store
model:
public function libraries() { return $this->hasMany('App\Library'); }
Behind the scenes, Laravel will automatically link the id
column of the Store
table to the store_id
column of the Library
table.
If you wanted to explicitly define it, then you would do it like this:
public function libraries(){ return $this->hasMany('App\Library', 'store_id','id'); }
$store->libraries() or $library->store()
).If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With