如何使用附加创建新的多对多记录

How to create a new many to many record with attach

好吧,我看过一些关于这个的帖子,但我根本不明白附加的概念,我有三个 tables:

Llistes(Lists):

        $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();

枢轴 table: 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');
}

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

无需对来自数据透视表 table 的 add/remove 条记录实施方法。 Eloquent 有 attach/detach 方法可以为你做到这一点,但首先你需要给 Eloquent 数据透视表 table 的列名,因为你是不使用 Eloquent 的列名约定。

在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);