updateorcreate modelo estructura español delete datos php laravel laravel-5 eloquent repository-pattern

php - estructura - laravel modelo de datos



Laravel modelo elocuente de cómo obtener datos de la tabla de relaciones (2)

Si entiendo tu pregunta correctamente, puedes usar la carga ansiosa.

public function index() { $products = Product::with(''skus'')->get(); }

Esto le dará una variedad de productos que tienen una matriz skus en cada objeto de producto.

Estoy desarrollando una aplicación laravel que tiene los siguientes modelos elocuentes

  • Producto hasMany (''App / Sku'', ''products_id'')
  • Sku belongTO (''Aplicación / Producto'')

Tengo un controlador ''ProductController'' donde está disponible el siguiente código

public function index() { $products = Product::all(); foreach($products as $product){ $products_id = $product->products_id; } }

Estoy exponiendo API RESTfull que permitirá a mis usuarios obtener todos los detalles del producto (incluidos skus, tipos de envío, etc.).

Supongamos que si tengo un API GET: / productos

El código que obtiene todos los detalles del producto será alguno de los siguientes

public function index() { $products = Product::all(); foreach($products as $product){ $products_id = $product->products_id; $skus_data = Product::find($products_id)->skus; } // Now I have both the product details + skus which I can bundle into an array/json. }

Ahora mi pregunta es, ¿es esta lógica adecuada? En este caso, todas las lógicas están en el controlador, ya que estoy usando modelos elocuentes. Tengo un modelo para cada tabla y las relaciones están definidas en él. ¿Hay alguna manera de que pueda obtener todos los detalles de un producto / modelo asociado (detalles de los productos (en la tabla 1) + detalles de Sku (en la tabla 2) en lugar de utilizar el siguiente

foreach($products as $product){ $products_id = $product->products_id; $skus_data = Product::find($products_id)->skus; }

Soy bastante nuevo en el desarrollo de modelos y modelos elocuentes. Utilizaré el patrón de repositorio para el desarrollo y en ese caso donde reside la lógica anterior (combinación de Producto + Sku).

Por favor ayuda.


Sí, puede obtener los detalles de los productos y skus sin realizar una consulta adicional por producto utilizando carga ansiosa (esto se conoce como el problema típico de consulta N + 1 donde N es el número de productos)

Supongamos que la relación entre su modelo de Product y Sku es:

Producto

public function skus() { return hasMany(''App/Sku'',''products_id''); }

Para buscar los datos de los productos junto con los datos sku, puede usar el método with . En tu controlador:

Controlador

$products = Product::with(''skus'')->get();

Luego, en sus puntos de vista, puede obtener la información de esta manera:

Ver

foreach ($products as $product) { //$product->skus is a collection of Sku models dd( $product->skus ); }

Para la pregunta del repositorio: si desea usar un repositorio, puede colocar la parte de acceso elocuente de su código dentro del repositorio. Entonces, por ejemplo, podrías tener este método dentro del repositorio:

ProductRepository

public function getProductsData() { //access eloquent from the repository return Product::with(''skus'')->get(); }

entonces puedes usar tu repositorio en tu controlador:

Controlador

//inject the repository in the controller public function __construct( ProductRepository $productRepo ) { $this->productRepo = $productRepo; } //use the injected repository to get the data public function index() { $products = this->productRepo->getProductsData(); }