Breaking

Post Top Ad

Your Ad Spot

jueves, 6 de agosto de 2020

Laravel pertenece a muchos ejemplos

laravel pertenece a muchos

Hablemos de la relación belongToMany. Recientemente creamos una introducción genial para crear un sitio web para compartir enlaces en Laravel. El tutorial cubre muchos conceptos, incluidos enrutamiento, modelos, controladores y creación de vistas. Incluso cubrimos algunas relaciones bĆ”sicas en Eloquent. Una cosa que no cubrimos fue la aplicación de muchas a muchas relaciones usando el mĆ©todo pertenece a muchos Veamos cómo podrĆ­amos hacer esto ahora.

  1. # Agregue el pertenece a muchos a su primer modelo.
  2. #Cree el modelo elocuente asociado .
  3. # Crear una migración para la tabla de etiquetas y la tabla dinĆ”mica.
  4. Migrar la base de datos.
  5. #Configure El inverso pertenece a muchos en el modelo de etiqueta.
  6. # Pon a prueba nuestra relación con Tinker .
  7. #Update El mĆ©todo create () MĆ©todo para el soporte de etiquetas con lists().
  8. #Actualice la vista Crear formulario para compatibilidad con etiquetas.
  9. #Update El mĆ©todo store () para Tag Support con attach().
  10. #Update El mĆ©todo edit () para Tag Support con lists().
  11. #Actualice la vista Editar formulario para compatibilidad con etiquetas.
  12. #Update El mĆ©todo update () para Tag Support con sync().
  13. # Actualice la vista Mostrar para el soporte de etiquetas.
  14. # Haga que el cuadro de selección de etiquetas sea bonito .

# Paso 1: Agregue el belongToMany a su primer modelo

En este ejemplo pertenece a muchos , estamos tratando con un Link.phpmodelo elocuente y queremos poder asociar ese modelo con muchas etiquetas segĆŗn sea necesario. Simplemente abrimos nuestro modelo Link.php y agregamos el siguiente fragmento.


# Paso 2: Crear el modelo elocuente asociado

Acabamos de agregar una relación ApplicaToMany en el modelo Link que hace referencia al modelo Tag. Ese modelo de etiqueta aĆŗn no existe, asĆ­ que creĆ©moslo ahora.

vagabundo @ homestead: ~ / Code / laravel $ php artisan make:model Tag


# Paso 3: Cree una migración para la tabla de etiquetas y la tabla dinÔmica.

Sabemos que las relaciones de muchos a muchos requieren una tabla dinĆ”mica. Es decir, necesitamos una tabla arbitraria para realizar bĆŗsquedas para ver quĆ© enlace estĆ” relacionado con quĆ© etiqueta y viceversa.

vagabundo @ homestead: ~ / Code / laravel $ php artisan make:migration create_tags_table --create=tags

Descargo de responsabilidad: las nuevas migraciones son fĆ”ciles, sin embargo, agregar migraciones a proyectos existentes me asusta. Ejecutar migraciones en una base de datos poblada puede ser un poco arriesgado cuando no estĆ” seguro de cuĆ”l serĆ” el resultado. La comida para llevar? ¡Haga una copia de seguridad de su base de datos temprano y con frecuencia!

De todos modos, el archivo de migración se crea para nosotros, pero aĆŗn no se completa con el esquema correcto. Necesitamos hacer esto por nuestra cuenta, asĆ­ que hagĆ”moslo ahora. Lo haremos:

  • agregue un tipo de cadena para el nombre de la etiqueta
  • AƱadir esquema para permitir la tabla dinĆ”mica
  • siga la convención de nomenclatura para tablas dinĆ”micas
  • configurar dos columnas, una para link_id y otra para tag_id
  • agregar marcas de tiempo a la tabla dinĆ”mica
  • agregue la capacidad de eliminar en cascada si un enlace se elimina a travĆ©s de una clave externa

Nota: La convención para una tabla dinĆ”mica es usar la versión singular de las dos tablas que estamos tratando de conectar, y estĆ”n en orden alfabĆ©tico. En nuestro caso, tenemos una tabla de enlaces y una tabla de etiquetas a las que nos gustarĆ­a unirnos. Entonces, si aplicamos las versiones singulares en orden alfabĆ©tico unidas con un guión bajo, eso nos dalink_tagAquĆ­ estĆ” el resultado de nuestros objetivos.


# Paso 4: migrar la base de datos

Este es un paso bastante fĆ”cil, solo escribe php artisan migrateen la terminal.


# Paso 5: Configurar el reverso pertenece a muchos en el modelo de etiqueta

Ya configuramos nuestro Links.phpmodelo para permitir una relación belongToMany . Esto significa que un enlace puede tener muchas etiquetas. Lo mismo es cierto para una etiqueta. Una etiqueta puede tener muchos enlaces. Ahora configuremos nuestro Tag.phpmodelo para permitir esto.


# Paso 6: Pruebe nuestra relación con Tinker

Con Laravel, es muy fĆ”cil probar cosas en la lĆ­nea de comandos usando php artisan tinkerUsemos tinker para probar nuestra nueva funcionalidad ahora. Preste atención a los mĆ©todos audaces, ya que son importantes cuando se trata de la relación pertenece a muchos.

vagrant @ homestead: ~ / Code / laravel $ php artisan tinker
Crea una nueva etiqueta.

>>> $ tag = nueva aplicación \ Tag;

AsĆ­gnele un nombre.
>>> $ etiqueta-> nombre = 'jQuery';
=> "jQuery"

Guarde esa etiqueta.

>>> $ etiqueta-> guardar ();
=> verdadero
>>> Aplicación \ Etiqueta :: all () -> toArray ();
=> [
       [
           "id" => 1,
           "name" => "jQuery",
           "created_at" => "2015-06-23 14:28:55",
           "updated_at" => "2015-06-23 14:28:55"
       ]
   ]
>>>

Enumere las etiquetas.

>>> Aplicación \ Etiqueta :: listas ( 'nombre' ) ;
=>  [
       "jQuery"
   ]
>>>

Cree otra etiqueta, nombre y guƔrdelo.

>>> $ tag = nueva aplicación \ Tag;
=>  {}
>>> $ etiqueta-> nombre = 'php';
=> "php"
>>> $ etiqueta-> guardar ();
=> verdadero
>>>

Enumere nuestras etiquetas nuevamente. Tenga en cuenta que ahora tenemos dos.

>>> Aplicación \ Etiqueta :: listas ( 'nombre' ) ;
=>  [
       "jQuery",
       "php"
   ]
>>>

Obtenga el primer enlace de nuestra base de datos. (Nota: ya tenĆ­amos este enlace en nuestra base de datos; cree el suyo propio para seguirlo).

>>> $ enlace = Aplicación \ Enlace :: primer ()
=>  {
       id: 6,
       category_id: 1,
       nombre: "Laravel PHP Framework",
       url: "http://laravel.com",
       created_at: "2015-06-06 21:41:33",
       updated_at: "2015-06-12 00:52:05",
       user_id: 1,
       slug: "laravel-php-framework",
       outbound_count: 3,
       descripción: "Laravel es un marco PHP moderno y poderoso con una elegante sintaxis para el desarrollo rÔpido de aplicaciones y la creación de prototipos. Laravel hace uso de los mejores paquetes disponibles en la comunidad PHP para proporcionar un entorno de desarrollo fantÔstico para usuarios de todos los niveles".
   }
>>>

Asocia una etiqueta a ese enlace.

>>> $ enlace-> etiquetas () -> adjuntar ( '2' ) ;
=> nulo
>>>

Obtenga todas las entradas en nuestra tabla dinÔmica (funcionó).

>>> DB :: select ('seleccionar * de link_tag');
=> [
        {
           link_id: 6,
           tag_id: 2,
           created_at: "2015-06-23 14:48:29",
           updated_at: "2015-06-23 14:48:29"
       }
   ]
>>>

Mostrar las etiquetas asociadas a este enlace.

>>> $ enlace-> etiquetas-> toArray ();
=> [
       [
           "id" => 2,
           "nombre" => "php",
           "created_at" => "2015-06-23 14:41:10",
           "updated_at" => "2015-06-23 14:41:10",
           "pivote" => [
               "link_id" => 6,
               "tag_id" => 2,
               "created_at" => "2015-06-23 14:48:29",
               "updated_at" => "2015-06-23 14:48:29"
           ]
       ]
   ]
>>>

Enumere los nombres de las etiquetas en este enlace.

>>> $ enlace-> etiquetas-> listas ( 'nombre' ) ;
=>  [
       "php"
   ]
>>>

Encuentra la etiqueta php en la base de datos.

>>> $ tag = App \ Tag :: find ('2');
=>  {
       id: 2
       nombre: "php",
       created_at: "2015-06-23 14:41:10",
       updated_at: "2015-06-23 14:41:10"
   }
>>>

Muestra quƩ enlaces estƔn asociados con esta etiqueta.

>>> $ etiqueta-> enlaces-> toArray ();
=> [
       [
           "id" => 6,
           "category_id" => 1,
           "name" => "Laravel PHP Framework",
           "url" => "http://laravel.com",
           "created_at" => "2015-06-06 21:41:33",
           "updated_at" => "2015-06-12 00:52:05",
           "user_id" => 1,
           "slug" => "laravel-php-framework",
           "outbound_count" => 3,
           "description" => "Laravel es un marco PHP moderno y potente con una elegante sintaxis para el desarrollo rÔpido de aplicaciones y la creación de prototipos.
 Laravel utiliza los mejores paquetes disponibles en la comunidad PHP para proporcionar un entorno de desarrollo fantƔstico para usuarios de todos los niveles de habilidad ".

           "pivote" => [
               "tag_id" => 2,
               "link_id" => 6
           ]
       ]
   ]
>>>

Muy dulce. Al usar tinker, podemos ver que todas las nuevas funcionalidades que agregamos para la relación belongToMany en losmodelosLink.phpyTag.phpestĆ”n funcionando.


# Paso 7: Actualice el mƩtodo Crear controlador para compatibilidad con etiquetas

En el paso anterior, tenemos una pequeƱa prueba de concepto, ya que parece funcionar correctamente cuando se usa Tinker. Nuestra vista, que muestra el formulario para crear un nuevo enlace, estarĆ” esperando una $tagsvariable que podemos usar como segundo argumento para Form :: select . AsegurĆ©monos de proporcionarles el código en este mĆ©todo.

Este paso asegura que seleccionamos todas las etiquetas disponibles para seleccionar cuando visitamos la vista para crear un nuevo enlace.


# Paso 8: actualice el formulario de creación para compatibilidad con etiquetas

Ahora podemos permitir el soporte de etiquetas belongToMany en la interfaz de usuario. En el formulario que usamos para crear un nuevo enlace, agreguemos el siguiente fragmento.

Preste atención a la lista de argumentos Form :: select . El primer argumento es el nombre del elemento seleccionado. Le agregamos la notación de matriz para permitir que este elemento de selección maneje el paso de mĆŗltiples valores a la vez a travĆ©s de una matriz. El segundo argumento son los valores predeterminados que llenarĆ”n la lista. Establecimos esto en $tags, y mostramos cómo llenar esa variable en el paso anterior. El tercer argumento especifica los elementos seleccionados en la lista. Para una nueva entrada, podemos dejar esto en nulo. Para un formulario de estilo de actualización, este deberĆ” tener los valores de las etiquetas actualmente seleccionadas. El cuartoEl argumento es el mĆ©todo familiar de pasar una matriz que contiene atributos y valores adicionales que deben asignarse al elemento.

Con tanto nuestro formulario como nuestro controlador ahora actualizados para admitir etiquetas a travƩs de nuestro trabajo paymentsToMany, podemos verificar en el navegador para asegurarnos de que todo estƩ funcionando.

Laravel pertenece a muchos ejemplos


# Paso 9: Actualice el mƩtodo store () para el soporte de etiquetas

Ahora que tenemos nuestra base de datos lista para admitir etiquetas con muchas a muchas relaciones y una tabla dinĆ”mica, junto con un formulario que muestra las etiquetas para que las seleccionemos, debemos asegurarnos de que cuando enviemos el formulario para almacenar una nueva entrada en la base de datos que maneja procesa las etiquetas correctamente. Puede verse mĆ”s o menos asĆ­:

El mĆ©todo clave al que debe prestar atención es el attach()mĆ©todo. Esto es lo que se encarga de aceptar la entrada de etiquetas y asociarla al recurso dado. El mĆ©todo attach () es perfecto para crear el recurso inicial en la base de datos.


# Paso 10: Actualice el mƩtodo edit () para Tag Support.

Esto podrĆ­a manejarse con Route Model Binding, pero aĆŗn no lo tenemos configurado en nuestro proyecto. AquĆ­ hay un ejemplo de cómo puede llenar las etiquetas seleccionadas actualmente para usarlas en un formulario de estilo de edición o actualización. O, por supuesto, podrĆ­amos refactorizar esto para mejorarlo mucho, pero por ahora, esto funcionarĆ”.


# Paso 11: Actualice la vista Editar formulario para compatibilidad con etiquetas.

En este paso, nos aseguramos de que el tercer argumento incluye todos los valores para las etiquetas seleccionadas, $currentTagsDe esta manera, si tiene un recurso que ya tiene varias etiquetas seleccionadas, cuando vaya a editar ese recurso en un formulario, esto se reflejarĆ” en la interfaz de usuario y podrĆ” agregar y eliminar etiquetas segĆŗn sea necesario desde allĆ­.


# Paso 12: Actualice el mƩtodo update () para la compatibilidad con etiquetas

Cuando se trata de una relación de varios a varios en el contexto de una actualización de recursos , es posible que adjuntar no sea la mejor solución. En este caso, queremos poder eliminar y agregar elementos a la tabla dinĆ”mica simultĆ”neamente durante una actualización. En otras palabras, queremos sincronizar la base de datos con nuestra entrada. En este caso usamos el sync()mĆ©todo. Un ejemplo de esto podrĆ­a ser algo como esto:


# Paso 13: Actualice la vista Mostrar para compatibilidad con etiquetas

En un momento, presionaremos el botón de envĆ­o con dos etiquetas seleccionadas para probar nuestros nuevos superpoderes. Primero, actualice la vista que muestra un enlace para que tambiĆ©n muestre las etiquetas que asignamos durante el proceso de creación. Simplemente agregamos el siguiente fragmento donde queremos que se muestren las etiquetas y estaremos listos.

¡Podemos ver que funciona como un encanto!

Pertenece a muchos con etiquetas


# Paso 14: Haga que el cuadro de selección de etiquetas sea bonito

Tenemos una solución de trabajo en este momento, pero el cuadro de selección como se ve en este momento no es realmente ideal. Hagamos uso de un fantĆ”stico complemento de jQuery llamado Select2 para que podamos embellecer el cuadro de selección y convertirlo en un elemento de interfaz de usuario de selección de etiqueta familiar. Es increĆ­blemente fĆ”cil de hacer. Para este ejemplo, simplemente agregamos los siguientes fragmentos a nuestro diseƱo maestro.

Coloque este fragmento en la sección del encabezado:

Luego, coloque esto en el pie de pƔgina:

Finalmente, actualice el elemento de selección particular que le interesa para tener una identificación a la que pueda apuntar el complemento select2. Usamos prettify como id, por lo que podemos aplicarlo a nuestra selección asĆ­:

Por supuesto, esta es simplemente una forma rĆ”pida y sucia de hacer que esto funcione con un mĆ­nimo esfuerzo. Puede ser mejor usar Gulp y Elixir al implementar esto en producción para manejar la compilación y minificación de activos.

Con esta simple adición, podemos ver que nuestras etiquetas ahora se ven ridículamente increíbles.
select2 etiquetas

pantalla de etiquetas select2

MÔs recursos útiles

Los siguientes enlaces se aplican directamente a este episodio y deberĆ­an ser muy Ćŗtiles para usted.
http://laravel.com/-docs/master/eloquent-relationships#many-to-many
http://laravel.com/-docs/master/eloquent#defining-models
https://laracasts.com/-series / laravel-5-fundamentales

AdemÔs, puede ser útil echar un vistazo al código fuente de los métodos relevantes que utilizamos en este tutorial.

liza()

adjuntar()

sincronizar ()

Laravel pertenece a muchos ejemplos Conclusión

En este episodio, cubrimos algunas caracterĆ­sticas realmente geniales de trabajar con Laravel y establecer relaciones de muchos a muchos utilizando la relación belongToMany. Ahora tenemos un buen plan o libro de jugadas, si lo desea, para adoptar un enfoque paso a paso para agregar apoyo de muchos a muchos para un proyecto. Gracias por revisar el tutorial.

No hay comentarios.:

Publicar un comentario

Post Top Ad

Your Ad Spot

PƔginas