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.
- Necesito verificar si la etiqueta existe
- Si lo hace, obtenga su ID
- 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