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

04 January, 2024

Use Model shouldBeStrict when starting a new Laravel app

 Programing Coderfunda     January 04, 2024     No comments   

---



So you have an idea for a brand new app. You install Laravel, you're ready to get started. What's the first thing you should do?


For me, I open up the app service provider and go down to the boot method and set the global Model::shouldBeStrict():
public function boot(): void
{
Model::shouldBeStrict();
}



With this turned on it does the following:
public static function shouldBeStrict(bool $shouldBeStrict = true)
{
static::preventLazyLoading($shouldBeStrict);
static::preventSilentlyDiscardingAttributes($shouldBeStrict);
static::preventAccessingMissingAttributes($shouldBeStrict);
}



This does three things:



* Prevents lazy loading

* It prevents silently discarding attributes.

* It prevents accessing missing attributes.






Preventing Lazy Loading




Here is an example of lazy loading.
$articles = \App\Models\Article::get();

foreach ($articles as $article) {
echo " * " . $article->user->name . "
\n";
}



If you run this, it will output what you expect. However, it’s lazy loading the user relationship, causing a new query for every loop.


With shouldBeStrict turned on instead of running the code you’ll get an error giving you instant feedback:
Attempted to lazy load [user] on model [App\Models\Article] but lazy loading is disabled.



Prevent Silently Discarding Attributes




Here is an example showing trying to update an attribute that is not fillable:
$user->fill(["remember_token" => "bar"]);



Now this will return an exception:
Add fillable property [remember_token] to allow mass assignment on [App\Models\User].



Prevent Accessing Missing Attributes.




Let’s pretend we are trying to display a property on the User that may not exist:
{{ $user->nonexistant }}



By default, Laravel will just not display anything because the property is not found, but with Strict mode turned on you get:
The attribute [nonexistant] either does not exist or was not retrieved for model [App\Models\User].



This really helps in cases where you might make a spelling mistake like:
{{ $user->emial }}



Now, you’ll get instant feedback you messed up.


Turning on Model::shouldBeStrict() is now the first thing I do on every app, and it helps prevent me from making basic mistakes that could be harmful to the app later on.



The post Use Model shouldBeStrict when starting a new Laravel app appeared first on Laravel News.


Join the Laravel Newsletter to get Laravel articles like this directly in your inbox.
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Email ThisBlogThis!Share to XShare to Facebook

Related Posts:

  • ACID Properties in DBMS ACID Properties in DBMSDBMS is the management of data that should remain integrated when any changes are done in it. It is because if the integr… Read More
  • Data Independence Data IndependenceData independence can be explained using the three-schema architecture.Data independence refers characteristic of being ability… Read More
  • Database Language Database LanguageA DBMS has appropriate languages and interfaces to express database queries and updates.Database languages can be used to read,… Read More
  • DBMS Notation of ER diagram Notation of ER diagramDatabase can be represented using the notations. In ER diagram, many notations are used to express the cardinality. These … Read More
  • DBMS ER Model ConceptER modelER model stands for an Entity-Relationship model. It is a high-level data model. This model is used to define the data elements and relationsh… Read More
Newer Post Older Post Home

0 comments:

Post a Comment

Thanks

Meta

Popular Posts

  • 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...
  • SQL ORDER BY Keyword
      The SQL ORDER BY Keyword The ORDER BY keyword is used to sort the result-set in ascending or descending order. The ORDER BY keyword sorts ...
  • 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...
  • failed to load storage framework cache laravel excel
       User the export file and controller function  ..         libxml_use_internal_errors ( true ); ..Good To Go   public function view () : ...
  • Features CodeIgniter
    Features CodeIgniter There is a great demand for the CodeIgniter framework in PHP developers because of its features and multiple advan...

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

  • Fathom Analytics Events for Laravel Livewire - 6/6/2025
  • Replace String Prefixes Precisely with Laravel's replaceStart Method - 5/31/2025
  • Clean Up Your Code with the whenHas Method - 6/5/2025
  • Laravel OpenRouter - 6/4/2025
  • Enable Flexible Pattern Matching with Laravel's Case-Insensitive Str::is Method - 5/31/2025

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