Newsletter Archive

Don't rely on key ordering with MySQL JSON values

This behavior caught me by surprise

Different approaches to upgrading to a new major Laravel version

And we explain the pros and cons of each

Be consistent with composer scripts in CI

Keep it simple and save yourself some trouble

Why we like minimal seeders for tests

Getting this right will make your tests so much easier to maintain

You don't need to manually run seeders in your tests

Laravel is constantly making things nicer

A surprising issue with the Auth user and tests

Knowing how this works helps you avoid false failures in your tests

Lazy loading protection does not catch all N+1 queries

I discovered this one the hard way

Should you be able to override coding standards locally?

And why am I even asking this question?

A simple approach to localization using middleware

We used this on a recent project and it worked great.

How to rate limit by IP behind a Cloudflare proxy

If you don't do this, your app could actually start blocking Cloudflare traffic.

Don't take it personal if your contribution is rejected

You had a good idea and submitted it, but then the project rejects it. Now what?

Maybe you don't need to write code this time

And using a no-code tool may even give you more empathy for users of your app

How to reference a PHP CodeSniffer ruleset in EasyCodingStandard

This simple addition can make it much easier to migrate between tools

How does LetsEncrypt work behind Cloudflare?

If we use a proxy like Cloudflare, will it impact our ability to issue LetsEncrypt certificates?

Considerations when eager loading resource collections

Check out a subtle bug that avoided notice for a while, and how tests eventually helped us.

The right way to fix double encoding in Blade components

There is a lot of bad advice out there on this topic. Here's a better approach.

Version untracked files with PhpStorm

Another very handy use for PhpStorm's Local History feature

Enforcing Horizon auth in local

Is this overkill? Or does it give you more confidence in your application?

Cloudflare, Laravel, and TLS

Double check this setting to save yourself some trouble

A good rule around "down" migrations

Some would say don't bother to write "down" migrations. I argue that if you do, you should follow this rule.

Use the right tool for the job

You can still have your favorite, but it's good to see what else is out there

Should you manage roles and permissions with a UI?

It's tempting to let non-developers manage this data, but is it a good idea?

Understanding how Laravel sessions work

If we don't know how something works, it's more confusing when things behave differently than expected.

Using workarounds without creating a mess

Sometimes a workaround is unavoidable, but how can you avoid them from piling up technical debt?

Dealing with messy JSON

Sometimes API do unspeakable things and we have to work around it in our app

The value of a quick code demo

Sometimes it's more effective to show than tell

Don't get defensive during code review

Sometimes even a small observation can lead to a big improvement

How to assert a Laravel job is delayed

I've seen a lot of convoluted approaches to this, here's a drop-dead simple way to do it.

Ever need a different git setting per repo?

Maybe you have one git account for work, and one for open source. How do you make sure the right author is used in each repo?

Keep your code consistent

Ever find 5 different ways of doing something in a single codebase? Here's an approach to minimize that.

How to get rid of HEIC files in your app

And it makes your app easier to use for non-iPhone users too

The changing value of books throughout your career

Perhaps that book you thought was useless 5 years ago is exactly what you need today.

Actually read the whole error message

This seems really simple and obvious, but I've been burned in the past not doing this myself.

How much detail should you include in error messages?

Error messages are part of user experience.

Is it time to abstract this?

You spot two things in your app that are mostly the same. Is that an automatic refactor?

How do you test middleware?

Middleware can be a tricky thing to test. Here's what I did in a recent project.

Document before automating

As devs, sometimes we rush to coding a solution. But there's an important step that should come first.

A simple way to avoid multiple lookups within a request

Traditional caching comes with its own set of complexities. Here's a simple way to use basic PHP instead.

Joins in Eloquent? How?

Sometimes you need a join for performance or sorting by relations. Here's a way to do that without giving up Eloquent.

Ship something every day

There's value in shipping something, anything, at least once a day, even on a bigger feature.

Is sleep in a test always bad?

You might think adding sleep to a test is a dirty hack, but it's not always a bad thing.

Some reasons to write a down method in your migrations

And it's probably not the reason you think.

Use custom Mockery matchers for better Laravel assertions

Clean up your tests, especially when passing models as arguments

What does INT(11) mean in MySQL?

Here's a hint: it has nothing to do with length

How do you insert a new column at the beginning of a MySQL table?

And more importantly, why would you want to?

Be careful ordering columns in a migration

Laravel migrations let us insert a column in a specific position in a table, but it's not always a good idea.

Applying a class to a Markdown link

Ever wish you could add a CSS class to a Markdown link? Here's how I did it.

Don't forget to pin PECL extensions

We pin Composer packages and PHP versions, but what about PECL extensions?

How to make the AWS SDK much smaller

Only need a small portion of the AWS SDK, and wish you could make it a lot smaller?

Do you really need to install that SDK?

If you're integrating with a third-party API, you may not need to bring in a giant SDK.

Cache Larastan results in Github Actions

Larastan is a great tool, but it can slow down your CI pipeline. Here's how to cache the results to make each run faster.

Managing a micro-manager

It's frustrating to have a client or co-worker attempt to micro-manage you. We share some tips on how to make the working relationship better.

Drop unneeded steps in CI

This might seem pretty obvious, but it's easy to forget to remove steps from your CI pipeline when they are no longer needed.

Keep your Laravel CI pipeline running fast

CI pipelines tend to get slower over time, the more we add to them, and the bigger our project grows. Keeping an eye on this is important.

Knowing when to keep it simple

We take pride in building things "the right way", but there is a balance to strike with simplicity.

Should we write tests for this one-time command?

I'm a huge proponent of writing tests, but is there ever a valid time to skip them?

A good use case for the Eloquent sole() method

The sole() method has been around for a while, but I don't use it very much. Here's one place I found it useful.

The benefit of one-time commands

Is there any reason to build a Laravel command you only plan to use one time? Let's consider a few benefits.

Do we really need to build this feature?

Before diving into the code and cranking out a feature, sometimes it's useful to consider if we really need to build it at all.

Easily find specific code usages in PhpStorm without regex

Regexes in search logic are powerful, but this tip will supercharge your code searching without needing to get too fancy.

Understanding how Laravel view assertions work internally

No one likes a passing test when the actual logic is wrong. Here's how to make sure your view assertions are actually testing what you think they are.

Local history in PHPStorm

If you already have git, why would you use the local history feature in PHPStorm?

Be careful when using assertViewHas with null

Laravel's assertViewHas method doesn't work for null values. Here's how to test for them.

When to pull in top-level dependencies

If Laravel already requires a package, is there ever a reason to install it into your project directly?

Use GitHub issue templates to save time

Having a template not only makes issue creation easier, but also more consistent.

What if every Composer package had a fee?

An interesting thought experiment that might influence how many packages you pull into your project.

How to override PHPStorm file types

PHPStorm allows you to override the file type, giving you different syntax highlighting and auto-complete prompts.

When might you render a Blade template inline?

This isn't a feature I reach for frequently, but it's good to know it exists. Here is one use case where we found it quite handy.

How to make a bug fix way more valuable

Fixing bugs is important, but by taking just a little more time you can make your app much more resilient

Don't explicitly install dependencies if you don't need to

Pay attention to the dependencies Laravel or other packages are already bringing in. You may be pinning them to an older version without realizing it.

Take time to make things better

Look for opportunities to make things just a little bit nicer than you found them.

Tools should work for you, not boss you around

Ever have a day where you're "fixing the squiggles" in your editor and feel like the code got worse? Let's talk about how to avoid that.

Try not to make things worse

You know those parts of a codebase that feel "not great"? Be mindful to not further entrench those bad decisions.

Are fast queries always good?

I mean, yeah! Right? Well, there's more to the story...

Clean up dead git branch references automatically

When you merge a branch in GitHub, the reference to it is still in your local repo. How can you clean those up automatically?

A scenario using events and observers together

Sometimes it's useful to pair events and observers together. Let's look at one real-world example.

When should you use events and observers?

Laravel events and observers seem to do very similar things. So when would you use one over the other?

How do you know if something is slow in production?

The tools we used for finding slow code in development are not suitable for production. So how can we find slow code there?

Something slow? It's probably the database.

The absolute number one cause of slow code is the database. Laravel makes fixing some of the common issues very easy.

How do you know something is slow?

The first step in making your app faster is knowing what is slow. How do you figure that out?

What if you need a value that's random AND unique?

Sometimes we need random data that is ALSO unique. How can you generate that in Laravel?

Harness that post-conference excitement

New features! New packages! New techniques! How can we harness that excitement when we get back to work a conference?

Learn to love code review

Code review feedback might make us feel defensive, but if you approach it with the right attitude it can become something you value.

Find out what's slow BEFORE you deploy to prod

The earlier you find an issue, the better! How can we improve our chances of finding slow code before it reaches production?

Sometimes Eloquent can make a query slower

Eloquent improves developer efficiency, but in some cases it can make a query less efficient. Let's look at one example and how to fix it.
Want a tip like this in your inbox every weekday? Sign up below 👇🏼

Level up your Laravel skills!

Each 2-minute email has real-world advice you can use.