simple raw query log example chunk mysql database laravel tags pivot-table

mysql - raw - simple query laravel



Laravel insertado en una mesa pivotante de tres vĂ­as (2)

Bien:

$tag = Tag::firstOrCreate(array(''text'' => $tag_text)); TagTrackUser::create(array( "tag_mdbid" => $tag->mdbid, "track_mdbid" => $track->mdbid, "user_mdbid" => Auth::user()->mdbid ));

¿Algo como eso? firstOrCreate hace lo que su nombre dice que hace, el resto es bastante sencillo Eloquent.

Resumen

Estoy construyendo un servicio de descubrimiento de música. Mi pregunta es: ¿cómo puedo insertar datos en la tabla pivotal de tres vías Tag_Track_User ?

Esquema

Tengo este esquema visto aquí en LaravelSD

Se compone de seis tablas principales (y algunas otras): Artistas, Álbumes, Pistas, Etiquetas, Usuarios y Tag_Track_User

La relación Artistas-> Álbumes-> Pistas es directa y como era de esperar.

Las etiquetas, las pistas y los usuarios se relacionan entre sí, ya que no pueden existir dos sin la tercera .

Relaciones

Artistas hasMany () Álbumes

Álbumes hasMany () Pistas y belongsTo () un artista

Pistas belongsTo () Álbumes

Pistas belongsToMany () Etiquetas y belongsToMany () a Usuarios

Etiquetas belongsToMany () Pistas y belongsToMany () a Usuarios

Usuarios belongsToMany () Etiquetas y belongsToMany () an Pistas

Modelos

Modelo de usuario

public function tags() { return $this->belongsToMany(''Tag'', ''tag_track_user'', ''user_mdbid'', ''tag_mdbid'')->withPivot(''track_mdbid''); } /** * @return /Illuminate/Database/Eloquent/Relations/BelongsToMany */ public function tracks() { return $this->belongsToMany(''Track'', ''tag_track_user'', ''user_mdbid'', ''track_mdbid'')->withPivot(''tag_mdbid''); }

El modelo Tag and Track contiene las mismas relaciones respectivas.

Pregunta

Entonces mi pregunta es:

¿Cómo inserto datos en la tabla Tag_Track_User ? La tabla tag_track_user es una tabla dinámica de 3 vías que mantiene información sobre las pistas que los usuarios etiquetaron.

Debe iniciar sesión para etiquetar una pista (lo que significa que tengo acceso a la ID del usuario). Se accede al ID de las pistas tal como lo estoy mostrando en la página donde está contenido el formulario. La etiqueta por otro lado; si ya existe en la tabla de etiquetas, quiero obtener su identificación y volver a utilizarla (ya que son únicas); de lo contrario, quiero crearla, asignarle una ID e insertarla en tag_track_user_table.

  1. Necesito verificar si la etiqueta existe
  2. Si lo hace, obtenga su ID
  3. Insertar datos en la tabla Tag_Track_User

Gracias

Cualquier ayuda que reciba sobre esto, es muy apreciada.


Dado que parece que no existe un patrón apropiado en Laravel, la forma más sencilla y más limpia es implementar cualquier relación de tres pivotes a través de un modelo dedicado a la tabla dinámica:

class Track public function trackTags() { return $this->hasMany(''TagTrack''); } ... class Tag public function tagTracks() { return $this->hasMany(''TagTrack''); } ... class TagTrack public function track() { return $this->belongsTo(''Track''); } public function tag() { return $this->belongsTo(''Tag''); } public function anotherRelationship(){ ... }

Tu puedes hacer:

$track->trackTags->myCustomPivotDataAndRelationship()

y en TagTrack tienes libertad para agregar tantas relaciones y campos que quiera

Tenga en cuenta que aún puede mantener muchos a muchos para usar cuando no necesita acceder a las relaciones pivote