1. Form validation – Only catch the first error
By default, Laravel Validation will return an array of all errors (if any). If you only want validation to stop right after the first error, use the bail
rule:
1 2 3 4 5 | <span class="token variable">$request</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">validate</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'title'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'bail|required|unique:posts|max:255'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'body'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'required'</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
2. Limit the update field
If you have a field that only wants to set a value once, doesn’t allow updates, you can set restrictions to the Model using the following tips:
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token keyword">class</span> <span class="token class-name">User</span> <span class="token keyword">extends</span> <span class="token class-name">Model</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">setEmailAttribute</span> <span class="token punctuation">(</span> <span class="token variable">$value</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">email</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">attributes</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'email'</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$value</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
3. Prepare data for form validation
If you want to modify the input data before validation, there is a method called prepareForValidation
in the FormRequest
class FormRequest
supports this:
1 2 3 4 5 6 7 8 | <span class="token keyword">use</span> <span class="token package">Illuminate Support Str</span> <span class="token punctuation">;</span> <span class="token keyword">protected</span> <span class="token keyword">function</span> <span class="token function">prepareForValidation</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">merge</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'slug'</span> <span class="token operator">=</span> <span class="token operator">></span> Str <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">slug</span> <span class="token punctuation">(</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">title</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
4. Compare dates with Carbon
If you have an events table with start_date and end_date fields, and you want to check if there are any events happening today:
1 2 3 4 5 6 | <span class="token variable">$startOfDay</span> <span class="token operator">=</span> <span class="token function">now</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">startOfDay</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> Event <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">whereDate</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'start_date'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'>='</span> <span class="token punctuation">,</span> <span class="token variable">$startOfDay</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">whereDate</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'end_date'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'<='</span> <span class="token punctuation">,</span> <span class="token variable">$startOfDay</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
5. Group by first letter
You can group Eloquent data under arbitrary conditions, this is an example grouping by the first letter of the username.
1 2 3 4 | <span class="token variable">$users</span> <span class="token operator">=</span> User <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">all</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">groupBy</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token variable">$item</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$item</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">name</span> <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
6. SoftDeletes and Query Builder
Note that SoftDeletes only works with Eloquent, not Query Builder.
1 2 3 4 5 6 | <span class="token comment">// Loại trừ các bản ghi bị soft delete</span> <span class="token variable">$users</span> <span class="token operator">=</span> User <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">all</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// KHÔNG loại trừ các bản ghi bị soft delete</span> <span class="token variable">$users</span> <span class="token operator">=</span> <span class="token constant">DB</span> <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">table</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'users'</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |