Valores de tabla pivote con laravel

publicado por: Anonymous

estoy usando laravel 5.5, tengo un modelo Member y un modelo Team, hice la relación belongsToMany correctamente. El problema es que en la tabla pivote de esa relación hay varios datos a los que necesito acceder, por ejemplo los campos seasonGames, seasonWins y personalRating, y no he podido acceder a ellos, de pronto estoy haciendo mal las cosas, lo intenté agregando los campos con el metodo withPivot pero no logro rescatar los datos.

hice éste metodo en el modelo Member:

public function teams(){
    return $this->belongsToMany('AppTeam','team_member','teamId','guid')->withPivot(['seasonGames', 'seasonWins', 'personalRating']);
}

pero ahora que debo hacer para acceder a esos datos? intenté usando
$member->pivot como muestra la documentacion pero solo contiene los indices de las tablas y nada más :/

EDITADO:
Las tablas y los campos que uso son éstas

members:

  • guid PK
  • name

teams:

  • teamId PK
  • name
  • type
  • rating
  • seasonGames
  • seasonWins

member_team:

  • teamId (PK de teams)
  • guid (PK de members)
  • seasonGames
  • seasonWins
  • personalRating

Los modelos son:

    class Member extends Model
    {
        protected $primaryKey = 'guid';

        public function teams(){
    return $this->belongsToMany('AppTeam','team_member','teamId','guid')->withPivot(['seasonGames', 'seasonWins', 'personalRating']);
}
    }


    class Team extends Model
{
    protected $primaryKey = "teamId";

    public function members(){

    return $this->belongsToMany('AppMember','team_member','teamId','guid');
}
}

solución

Para definir una relación con las llaves que tienes en las distintas tablas, tendrías que utilizar buena parte de los argumentos de belongsToMany.

Estos son dichos argumentos:

public function belongsToMany(
    $related, $table = null, $foreignPivotKey = null, $relatedPivotKey = null,
        $parentKey = null, $relatedKey = null, $relation = null) 

Siendo:

  • $parentKey la llave del modelo actual
  • $relatedKey la llave del modelo relacionado

En el caso del modelo Member sería:

public function teams()
{
    return $this->belongsToMany('AppTeam', 'member_team', 'guid', 'teamId', 'guid', 'teamId')
->withPivot(['seasonGames', 'seasonWins', 'personalRating']);
}

Sin embargo, si tienes el primary Key definido en el modelo teniendo en cuenta que no es 'id', no serían necesarios los dos últimos argumentos:

protected $primaryKey = 'guid';

En cuanto al modelo Team sería algo similar, pero “invertido”:

public function members()
{
    return $this->belongsToMany('AppMember', 'member_team', 'teamId', 'guid', 'teamId', 'guid')
->withPivot(['seasonGames', 'seasonWins', 'personalRating']);
}

Y también se puede definir la llave personalizada:

protected $primaryKey = 'teamId';
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *