web-dev-qa-db-fra.com

Comment enregistrer dans une relation polymorphe à Laravel?

Je lis le tutoriel * sur la façon de définir des relations polymorphes plusieurs-à-plusieurs dans Laravel mais il ne montre pas comment enregistrer des enregistrements avec cette relation.

Dans leur exemple, ils ont

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

et

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');
    }
}

J'ai essayé d'économiser de différentes manières, mais les tentatives qui ont le plus de sens pour moi sont les suivantes:

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

or

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

Rien de tout cela ne fonctionne. Quelqu'un peut-il me donner une idée de ce que je pourrais essayer?

9
Dubby

C'est simple comme ça, voir la section this .

Au lieu de définir manuellement l'attribut sur les vidéos, vous pouvez insérer le commentaire directement à partir de la méthode d'enregistrement de la relation:

//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);
18
João Mantovani