如何使用attach创建一个新的多对多记录

时间:2016-06-11 20:56:07

标签: laravel-5 eloquent many-to-many attachment record

哦,我看到一些关于这个的帖子,但我根本不理解附着的概念,我有三张桌子:

Llistes(的解释):

        $table->increments('id');
        $table->string('nom_llista');
        $table->integer('user_id')->unsigned();
    });

Cancons(的歌曲):

        $table->increments('id');
        $table->string('titol');
        $table->integer('genere_id')->unsigned();
        $table->integer('artista_id')->unsigned();
        $table->integer('album_id')->unsigned();

数据透视表:llistes_cancons( lists_songs)

        $table->increments('id');
        $table->integer('id_canco')->unsigned();
        $table->integer('id_llista')->unsigned();
        $table->timestamps();

我认为其他两个类是正确的,但我不确定:

在Canco.php中( Song.php ):

public function llistescancons_llistes()
{
    return $this->belongsToMany('App\Llista');
}

在Llista.php( List.php )中:

public function llistescancons_cancons()
{
    return $this->belongsToMany('App\Canco');
}

所以,问题是如何在我的控制器中实现一个功能,让我可以将新记录添加到数据透视表(多对多),如果可能有另一个功能来显示记录,我是Laravel中的新手,这对我来说有点困难。

1 个答案:

答案 0 :(得分:2)

没有必要实现从数据透视表中添加/删除记录的方法。 Eloquent有attach / detach方法可以为您做到这一点,但首先您需要向Eloquent提供数据透视表的列名,因为您没有使用Eloquent的列名约定。 / p>

在Canco.php(Song.php)中:

public function llistescancons_llistes()
{
    return $this->belongsToMany('App\Llista','llistes_cancons','id_canco','id_llista');
}

在Llista.php(List.php)中:

public function llistescancons_cancons()
{
    return $this->belongsToMany('App\Canco','llistes_cancons','id_llista','id_canco');
}

然后,如果您要将歌曲附加到列表,您可以轻松地使用歌曲id来执行此操作

$list = App\Llista::find(1);
$list->llistescancons_cancons()->attach($songId);

或其他方式

$song = App\Canco::find(1);
$song->llistescancons_llistes()->attach($listId);