Ayuda para no repetir codigo en controladores en laravel

  • Autor Autor pa3lo022
  • Fecha de inicio Fecha de inicio
P

pa3lo022

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola a todos, como estan?

Necesito una mano, estoy repitiendo el mismo codigo en un controlador y no se como hacer para llevarlo a otro lado y que se ejecute cada vez que lo necesite, no se si me explico.

Tengo el siguiente codigo en 3 metodos distintos dentro del mismo controlador:

Insertar CODE, HTML o PHP:
$invoiceNumberTemp = Sale::where('shop_id', shopConnect()->id)
            ->where('status', 'Pendiente')
            ->first();

        if (empty($invoiceNumberTemp)) {

            if (empty($newInvoice)) {
                $invoiceNumeber = 1;
                $sumProduct = 0;
                $sumTotal = 0;
            } else {
                $newInvoice = Sale::where('shop_id', shopConnect()->id)
                    ->orderBy('id', 'DESC')
                    ->first();

                $invoiceNumeber = $newInvoice->invoice + 1;
            }
        } else {
            $newInvoice = Sale::where('shop_id', shopConnect()->id)
                ->orderBy('id', 'DESC')
                ->first();

            $sumProduct = Sale::where('shop_id', shopConnect()->id)
                ->where('status', 'Pendiente')
                ->sum('quantity');

            $sumTotal = Sale::where('shop_id', shopConnect()->id)
                ->where('status', 'Pendiente')
                ->sum('discount');

            $invoiceNumeber = $newInvoice->invoice;
        }

Como puedo hacer para llevarlo a otro lado y llamarlo desde el metodo cuando lo necesite


muchas gracias
 
Hay diferentes maneras de hacer esto, puede, crear services, helpers, events. Todo depende de como este diseñada tu app y tus requerimientos.
Busca información de lo que te comente y veras ejemplos de como organizar todo y evitar el DRY. O también busca información de SOLID en especial la S en este caso. \
Usa "select" en las consultas para no estresar la BD cuando no es necesario.
Es mejor usar valores numericos en vez de "Pendiente" en la bd, si usas PHP > 8 usa ENUMS
 
Última edición:
Hay diferentes maneras de hacer esto, puede, crear services, helpers, events. Todo depende de como este diseñada tu app y tus requerimientos.
Busca información de lo que te comente y veras ejemplos de como organizar todo y evitar el DRY. O también busca información de SOLID en especial la S en este caso. \
Usa "select" en las consultas para no estresar la BD cuando no es necesario.
Es mejor usar valores numericos en vez de "Pendiente" en la bd, si usas PHP > 8 usa ENUMS
muchas gracias, voy a averiguar eso que me decis y voy a refactorizar las consultas.

muchas gracias nuevamente
 
Todo el código lo puedes meter dentro de un método de tu clase

PHP:
class InvoiceController
{
    private function getShopId()
    {
        return shopConnect()->id;
    }

    private function getPendingSale()
    {
        return Sale::where('shop_id', $this->getShopId())
            ->where('status', 'Pendiente')
            ->first();
    }

    private function getLatestSale()
    {
        return Sale::where('shop_id', $this->getShopId())
            ->orderBy('id', 'DESC')
            ->first();
    }

    private function getSum($field)
    {
        return Sale::where('shop_id', $this->getShopId())
            ->where('status', 'Pendiente')
            ->sum($field);
    }

    public function calculateInvoiceData()
    {
        $invoiceNumberTemp = $this->getPendingSale();
        $sumProduct = 0;
        $sumTotal = 0;

        if (empty($invoiceNumberTemp)) {
            $newInvoice = $this->getLatestSale();

            $invoiceNumber = empty($newInvoice) ? 1 : $newInvoice->invoice + 1;
        } else {
            $newInvoice = $this->getLatestSale();

            $sumProduct = $this->getSum('quantity');
            $sumTotal = $this->getSum('discount');

            $invoiceNumber = $newInvoice->invoice;
        }

        return [
            'invoiceNumber' => $invoiceNumber,
            'sumProduct' => $sumProduct,
            'sumTotal' => $sumTotal,
        ];
    }
}
 
Atrás
Arriba