doubi4617
2017-03-22 11:16 阅读 53
已采纳

如何在Laravel中保存多态关系?

I'm reading the tutorial* on how to define many-to-many polymorphic relationships in Laravel but it doesn't show how to save records with this relationship.

In the their example they have

class Post extends Model
{
    /**
     * Get all of the tags for the post.
     */
    public function tags()
    {
        return $this->morphToMany('App\Tag', 'taggable');
    }
}

and

class Tag extends Model
{
    /**
     * Get all of the posts that are assigned this tag.
     */
    public function posts()
    {
        return $this->morphedByMany('App\Post', 'taggable');
    }

    /**
     * Get all of the videos that are assigned this tag.
     */
    public function videos()
    {
        return $this->morphedByMany('App\Video', 'taggable');
    }
}

I've tried saving in different ways but the attempts that makes most sense to me is:

$tag = Tag::find(1);
$video = Video::find(1);
$tag->videos()->associate($video);

or

$tag->videos()->sync($video);

None of these are working. Can anyone give me a clue on what I could try?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    douchi0028 douchi0028 2017-03-22 11:22

    It's simple like that, see this section.

    Instead of manually setting the attribute on the videos, you may insert the Comment directly from the relationship's save method:

    //Create a new Tag instance (fill the array with your own database fields)
    $tag = new Tag(['name' => 'Foo bar.']);
    
    //Find the video to insert into a tag
    $video = Video::find(1);
    
    //In the tag relationship, save a new video
    $tag->videos()->save($video);
    
    点赞 评论 复制链接分享

相关推荐