Tengo un componente Livewire con las siguientes propiedades...
class MyClass extends Livewire\Component { public $dataCollection; // instance of Illuminate\Database\Eloquent\Collection public $dataArray; // converted to an array of arrays /* ... blah ... */ function getData() { /* ... */ $this->dataCollection = $ordersModel->processMySearch($srch)->get(); // returns multiple lines of data, producing a Collection $this->dataArray = $this->dataCollection->toArray(); } }Ahora, mi objetivo es enviar estos datos a la plantilla Livewire/Blade y entrelazarlos con una variable AlpineJS.
<div x-data="{ myCollection: @entangle('dataCollection').defer, myArray: @entangle('dataArray').defer }"> <table> <tbody> <template x-for="myRow in myCollection"> <tr> <template x-for="(myData, colName) in myRow"> <td :class="colName" x-text="myData"></td> </template> </tr> </template> </tbody> </table> </div> No funciona, porque parece que la colección de modelos no se convierte (o asigna) correctamente de Livewire/PHP a la variable myCollection de Alpine. Cuando ejecuto una depuración de console.log() en la variable, me dice que es una matriz vacía.
Sin embargo, si hago un bucle en la tabla, la variable myArray (en lugar de myCollection ):
<table> <tbody> <template x-for="myRow in myArray"> <tr> <!-- etc -->Luego, la tabla HTML se genera en la página muy bien.
La razón por la que preferiría usar el objeto Collection es porque es posible que desee actualizar algunos de los datos de la tabla. Si puedo actualizar los datos en los objetos del modelo ( @entangle ed) y hacer que los modelos se sincronicen con el componente Livewire/PHP, entonces no tendré que volver a generar los modelos en PHP, lo que podría ahorrarme algo de base de datos llamadas
¿Es posible @entangle variables de Alpine en colecciones de PHP de esta manera? Si es así, ¿qué estoy haciendo mal y por qué no funciona en el ejemplo anterior?
X
Descargo de responsabilidad El código anterior es un extracto (muy) simplificado de un proyecto más grande en el que estoy trabajando. No es una copia/pegado directo del código original y, como tal, puede contener errores menores de sintaxis. Trátelo como un pseudocódigo.