Source laraveldaily.com
Tip 1 Single Action Controller
If you want to create a controller with only one action, you can use the __invoke () method to create an “invokable” controller.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">namespace</span> <span class="token package">App Http Controllers</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">App User</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">App Http Controllers Controller</span> <span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">ShowProfile</span> <span class="token keyword">extends</span> <span class="token class-name">Controller</span> <span class="token punctuation">{</span> <span class="token comment">/** * Show the profile for the given user. * * @param int $id * @return Response */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">__invoke</span> <span class="token punctuation">(</span> <span class="token variable">$id</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">view</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'user.profile'</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'user'</span> <span class="token operator">=</span> <span class="token operator">></span> User <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">findOrFail</span> <span class="token punctuation">(</span> <span class="token variable">$id</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> </span> |
Routes
1 2 | Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'user/{id}'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'ShowProfile'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
The command to generate this controller is
1 2 | php artisan make:controller ShowProfile --invokable |
Tip 2 Unsigned Integer
To put foreign keys in migrations, instead of using integer () , use unsignedInteger () or integer () -> unsigned () , otherwise, you may get some SQL errors.
1 2 3 4 5 6 | Schema <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">create</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'employees'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> Blueprint <span class="token variable">$table</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$table</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">unsignedInteger</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'company_id'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$table</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">foreign</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'company_id'</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">references</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'id'</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">on</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'companies'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// ...</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
You can use unsignedBigInteger () in case the column is of type bigInteger ()
1 2 3 4 | Schema <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">create</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'employees'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> Blueprint <span class="token variable">$table</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$table</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">unsignedBigInteger</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'company_id'</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> |
Tip 3 Use OrderBy right in Eloquent relationship
You can use orderBy right within the Eloquent relationship of the model
1 2 3 4 5 6 7 8 9 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">products</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">hasMany</span> <span class="token punctuation">(</span> Product <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">productsByName</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">hasMany</span> <span class="token punctuation">(</span> Product <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">orderBy</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'name'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Tip 4 Arrange the migrations
If you want to sort the DB migrations, you just need to change the file name and timestamp For example, change from 2018_08_04_070443_create_posts_table.php to 2018_07_04_070443_create_posts_table.php , then this migrations file will change the placement by alphabetical
Tip 5 Raw DB Queries: havingRaw ()
You can use some RAW DB QUERIES queries in several places, including havingRaw () after performing groupBy ().
1 2 | Product <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">groupBy</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'category_id'</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">havingRaw</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'COUNT(*) > 1'</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> |
Tip 6 Turn the $ loop in foreach loop
In the foreach loop, you can use the $ loop variable to do a lot of things
1 2 3 4 5 6 7 8 9 10 | @ <span class="token keyword">foreach</span> <span class="token punctuation">(</span> <span class="token variable">$users</span> <span class="token keyword">as</span> <span class="token variable">$user</span> <span class="token punctuation">)</span> @ <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$loop</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">first</span> <span class="token punctuation">)</span> This is the first iteration <span class="token punctuation">.</span> @ <span class="token keyword">endif</span> @ <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$loop</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">last</span> <span class="token punctuation">)</span> This is the last iteration <span class="token punctuation">.</span> @ <span class="token keyword">endif</span> <span class="token operator"><</span> p <span class="token operator">></span> This is user <span class="token punctuation">{</span> <span class="token punctuation">{</span> <span class="token variable">$user</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">id</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> p <span class="token operator">></span> @ <span class="token keyword">endforeach</span> |
Specific tasks that can be performed with the $ loop variable may be as follows
Properties | Description |
---|---|
$ loop-> index | Get the index of the current loop calculated starting at 0 |
$ loop-> iteration | Get the number of iterations (starting at 0) |
$ loop-> remaining | Number of loops remaining of the loop |
$ loop-> count | The total number of elements that will be browsed in the loop |
$ loop-> first | The first element in the loop |
$ loop-> last | The last element in the loop |
$ loop-> even | The elements stand evenly in the loop |
$ loop-> odd | The elements stand odd positions in the loop |
$ loop-> depth | Nesting level of the current loop |
$ loop-> parent | When the loop is nested, this variable returns the parent loop |
Tip 7 Eloquent where date methods
In Eloquent, we can use the functions whereDay (), whereMonth (), whereYear (), whereDate (), whereTime () to query the time correctly.
1 2 3 4 5 6 | <span class="token variable">$products</span> <span class="token operator">=</span> Product <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">'created_at'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'2018-01-31'</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> <span class="token variable">$products</span> <span class="token operator">=</span> Product <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">whereMonth</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'created_at'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'12'</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> <span class="token variable">$products</span> <span class="token operator">=</span> Product <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">whereDay</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'created_at'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'31'</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> <span class="token variable">$products</span> <span class="token operator">=</span> Product <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">whereYear</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'created_at'</span> <span class="token punctuation">,</span> <span class="token function">date</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'Y'</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">get</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$products</span> <span class="token operator">=</span> Product <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">whereTime</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'created_at'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'='</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'14:13:58'</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> |
Tip 8 Route group inside a group
In Route , we can create another group within the group itself.
1 2 3 4 5 6 7 8 | Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">group</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'prefix'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'account'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'as'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'account.'</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'login'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">' <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> '</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'register'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">' <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> '</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">group</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'middleware'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'auth'</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> Route <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'edit'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">' <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> '</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> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Tip 9 Increments and decrements
If you want a column in the DB to increment, just use increment () . It is not necessary that every increase of 1, may increase each time to 50.
1 2 3 | Post <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">find</span> <span class="token punctuation">(</span> <span class="token variable">$post_id</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">increment</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'view_count'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> User <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">find</span> <span class="token punctuation">(</span> <span class="token variable">$user_id</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">increment</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'points'</span> <span class="token punctuation">,</span> <span class="token number">50</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Tip 10 Check if the view file exists?
You can check to see if the View files exist before loading them
1 2 3 4 | <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">view</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">exists</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'custom.page'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Load the view</span> <span class="token punctuation">}</span> |
You can also load the first View file if it exists in the array of view files listed
1 2 | <span class="token keyword">return</span> <span class="token function">view</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">first</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'custom.dashboard'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'dashboard'</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token variable">$data</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |