CoderFunda
  • Home
  • About us
    • Contact Us
    • Disclaimer
    • Privacy Policy
    • About us
  • Home
  • Php
  • HTML
  • CSS
  • JavaScript
    • JavaScript
    • Jquery
    • JqueryUI
    • Stock
  • SQL
  • Vue.Js
  • Python
  • Wordpress
  • C++
    • C++
    • C
  • Laravel
    • Laravel
      • Overview
      • Namespaces
      • Middleware
      • Routing
      • Configuration
      • Application Structure
      • Installation
    • Overview
  • DBMS
    • DBMS
      • PL/SQL
      • SQLite
      • MongoDB
      • Cassandra
      • MySQL
      • Oracle
      • CouchDB
      • Neo4j
      • DB2
      • Quiz
    • Overview
  • Entertainment
    • TV Series Update
    • Movie Review
    • Movie Review
  • More
    • Vue. Js
    • Php Question
    • Php Interview Question
    • Laravel Interview Question
    • SQL Interview Question
    • IAS Interview Question
    • PCS Interview Question
    • Technology
    • Other

07 August, 2024

Yet another repository pattern post... Developers that don't use repository pattern and think it's redundant and over-engineering, where do you leave the complex queries of your project at?

 Programing Coderfunda     August 07, 2024     No comments   

Just for context first, I'm rewriting an old application that used Laravel 8 and many things went wrong due to the lack of experience in the dev team (juniors and even seniors that had never used Laravel before). A lot of repeated functions, gigantic methods, bad practices, etc. You got the idea.

So now I'm rewriting it, while trying to make it follow some patterns and also follow some guidelines for a better and cleaner code, for improved readability and maintenance later on.

With all that said, I spent this week reading a lot about the use of Service and Repository Patterns in Laravel, and I started doing it using both but now I get why some people said that it's over-engineering because for like 85% of the Models in the old project (there are more than 150 models), the respective repositories class will only have basic Eloquent methods. The repository will have method create() that has one line that is just calling the same model with $model->create(). So for a good chunk of the project the repositories will be kinda useless.

The problem is the other 15% of the Models and data in general... a lot of the pages in our system shows statistics charts (line, pie, bar, polar, radar, etc) using ChartJS, and most of the queries for generating those charts are very complex and not using Eloquent, and just plain SQL as this is easier to write when you are dealing with a SQL with 80 lines or more, some even use database stored procedures and db functions calls.

Because of those queries, I wanted to go for the repository pattern but now I'm not so sure as there is so much redundancy for a good part of the code like I said before.

I spent some time searching, and for getting more inputs from other Laravel developers, I wanted to ask to you guys that work in complex projects, where do you store very complex queries? Specially those that are not even using Eloquent methods to be generated?

I saw some people leaving those complex, DB raw plain SQL queries at the Controller itself, others on a Service class, some people left them directly inside the Models as a method to be called like $user->getComplexChartData() after using a User::find($id), some create an Utils class, other guy made a class called UserCharts class inside a new directory called Charts...

The thing is, none of the solutions I saw looked like the "perfect match" for me.

How do you guys handle those?

edit: just adding that the queries result have to obviosuly be manipulated by the PHP for adding/treating some data, so that's why its planned to be on a method for each submitted by /u/Cthulhu-Cultist
[link] [comments]
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Email ThisBlogThis!Share to XShare to Facebook

Related Posts:

  • HTTP Cache Packages for LaravelWe wrote about Joseph Silber’s Laravel page cache package, which provides static HTTP response caching for Laravel. There are other open-sou… Read More
  • Count Models With the Laravel Visits PackageLaravel Visits is a package by Bader Almutairi for attaching counters to any model to track visits with tags. The main features this package provides,… Read More
  • Laravel Log Enhancer PackageThe Laravel Log Enhancer is a package for Laravel 5.6 adds additional data to your Laravel logs. Thanks to Laravel’s logging updates that sh… Read More
  • Laravel Page Cache for Lightning Fast Page Loads Laravel Page cache is a plugin by Joseph Silber designed to cache HTTP GET responses as static files for lightning fast page loads. This plugin … Read More
  • Cascading Soft Deletes with Laravel 5 Laravel Soft Cascade is a package that makes it easy to perform soft cascade deletes and restores on related models using soft deleting.Con… Read More
Newer Post Older Post Home

0 comments:

Post a Comment

Thanks

Meta

Popular Posts

  • Spring boot app (error: method getFirst()) failed to run at local machine, but can run on server
    The Spring boot app can run on the online server. Now, we want to replicate the same app at the local machine but the Spring boot jar file f...
  • Log activity in a Laravel app with Spatie/Laravel-Activitylog
      Requirements This package needs PHP 8.1+ and Laravel 9.0 or higher. The latest version of this package needs PHP 8.2+ and Laravel 8 or hig...
  • Vue3 :style backgroundImage not working with require
    I'm trying to migrate a Vue 2 project to Vue 3. In Vue 2 I used v-bind style as follow: In Vue 3 this doesn't work... I tried a...
  • Laravel auth login with phone or email
          <?php     Laravel auth login with phone or email     <? php     namespace App \ Http \ Controllers \ Auth ;         use ...
  • Enabling authentication in swagger
    I created a asp.net core empty project running on .net6. I am coming across an issue when I am trying to enable authentication in swagger. S...

Categories

  • Ajax (26)
  • Bootstrap (30)
  • DBMS (42)
  • HTML (12)
  • HTML5 (45)
  • JavaScript (10)
  • Jquery (34)
  • Jquery UI (2)
  • JqueryUI (32)
  • Laravel (1017)
  • Laravel Tutorials (23)
  • Laravel-Question (6)
  • Magento (9)
  • Magento 2 (95)
  • MariaDB (1)
  • MySql Tutorial (2)
  • PHP-Interview-Questions (3)
  • Php Question (13)
  • Python (36)
  • RDBMS (13)
  • SQL Tutorial (79)
  • Vue.js Tutorial (68)
  • Wordpress (150)
  • Wordpress Theme (3)
  • codeigniter (108)
  • oops (4)
  • php (853)

Social Media Links

  • Follow on Twitter
  • Like on Facebook
  • Subscribe on Youtube
  • Follow on Instagram

Pages

  • Home
  • Contact Us
  • Privacy Policy
  • About us

Blog Archive

  • September (100)
  • August (50)
  • July (56)
  • June (46)
  • May (59)
  • April (50)
  • March (60)
  • February (42)
  • January (53)
  • December (58)
  • November (61)
  • October (39)
  • September (36)
  • August (36)
  • July (34)
  • June (34)
  • May (36)
  • April (29)
  • March (82)
  • February (1)
  • January (8)
  • December (14)
  • November (41)
  • October (13)
  • September (5)
  • August (48)
  • July (9)
  • June (6)
  • May (119)
  • April (259)
  • March (122)
  • February (368)
  • January (33)
  • October (2)
  • July (11)
  • June (29)
  • May (25)
  • April (168)
  • March (93)
  • February (60)
  • January (28)
  • December (195)
  • November (24)
  • October (40)
  • September (55)
  • August (6)
  • July (48)
  • May (2)
  • January (2)
  • July (6)
  • June (6)
  • February (17)
  • January (69)
  • December (122)
  • November (56)
  • October (92)
  • September (76)
  • August (6)

  • Failed to install 'cordova-plugin-firebase': CordovaError: Uh oh - 9/21/2024
  • pyspark XPath Query Returns Lists Omitting Missing Values Instead of Including None - 9/20/2024
  • SQL REPL from within Python/Sqlalchemy/Psychopg2 - 9/20/2024
  • MySql Explain with Tobias Petry - 9/20/2024
  • How to combine information from different devices into one common abstract virtual disk? [closed] - 9/20/2024

Laravel News

  • Sublime Text Releases Update With Support for Right Sidebar - 5/22/2025
  • Enhance Email Validation with Laravel's Fluent Email Rule Object - 5/18/2025
  • Locale-aware Number Parsing in Laravel 12.15 - 5/21/2025
  • Handle Fluent Values as Arrays with Laravel's array() Method - 5/18/2025
  • Chargebee Starter Kit for Billing in Laravel - 5/20/2025

Copyright © 2025 CoderFunda | Powered by Blogger
Design by Coderfunda | Blogger Theme by Coderfunda | Distributed By Coderfunda