I am new to laravel, can someone explain to me the parameters of morphMany:
JavaScript
x
$this->morphMany(Photo::class, 'imageable');
Advertisement
Answer
The MorphMany relationship has the following function signature:
JavaScript
public function morphMany($related, $name, $type = null, $id = null, $localKey = null)
{
//
}
Where:
$related
(required): refers to the related model. e.g:User::class
.$name
(required): the name of the polymorphic relation, likecommentable
.$type
(optional): customize the{relation}_type
field to look up when doing a query.$id
(optional): customize the{relation}_id
field to look up when doing a query.$localKey
(optional): customize the local key (by defaultid
) to search when doing a query.
So -using the example shown in the Laravel documentation– if you want to use a different table structure for the comments
table from this:
JavaScript
posts
id - integer
title - string
body - text
videos
id - integer
title - string
url - string
comments
id - integer
body - text
commentable_id - integer
commentable_type - string
to this:
JavaScript
posts
id - integer
title - string
body - text
videos
id - integer
title - string
url - string
comments
id - integer
body - text
foo - integer // the index to look
bar - string // the type to match
You’d need to define your relationships like this:
Post.php
JavaScript
public function comments()
{
return $this->morphMany(Comment::class, 'commentable', 'foo', 'bar');
}
Video.php
JavaScript
public function comments()
{
return $this->morphMany(Comment::class, 'commentable', 'foo', 'bar');
}
Comment.php
JavaScript
public function commentable()
{
return $this->morphTo('commentable');
}
Check this other answer.