Nguồn laraveldaily.com
Tip 1 Single Action Controller
Nếu bạn muốn tạo một controller với chỉ một action, bạn có thể sử dụng phương thức __invoke() để tạo một controller “invokable”.
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<span class="token punctuation"></span>Http<span class="token punctuation"></span>Controllers</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">App<span class="token punctuation"></span>User</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">App<span class="token punctuation"></span>Http<span class="token punctuation"></span>Controllers<span class="token punctuation"></span>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> |
Câu lệnh để generate controller này là
1 2 | php artisan make:controller ShowProfile --invokable |
Tip 2 Unsigned Integer
Để đặt foreign key trong migrations, thay vì sử dụng integer(), hãy sử dụng unsignedInteger() hoặc integer()->unsigned(), nếu không, bạn có thể nhận một số lỗi SQL.
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> |
Bạn có thể sử dụng unsignedBigInteger() trong trường hợp cột có kiểu 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 Sử dụng OrderBy ngay trong Eloquent relationship
Bạn có thể sử dụng orderBy ngay trong Eloquent relationship của 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 Sắp xếp các migrations
Nếu muốn sắp xếp các DB migrations, bạn chỉ cần thay đổi tên file và timestamp
Ví dụ, đổi từ 2018_08_04_070443_create_posts_table.php thành 2018_07_04_070443_create_posts_table.php, thì file migrations này sẽ thay đổi vị trí sắp xếp theo alphabetical
Tip 5 Raw DB Queries: havingRaw()
Bạn có thể sử dụng một số truy vấn RAW DB QUERIES ở một vài nơi, bao gồm cả havingRaw() sau khi thực hiện 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 Biến $loop trong vòng lặp foreach
Trong vòng lặp foreach, bạn có thể sử dụng biến $loop để thực hiện rất nhiều việc
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> |
Cụ thể các tác vụ có thể thực hiện với biến $loop có thể như sau
Thuộc tính | Mô tả |
---|---|
$loop->index | Lấy chỉ số index của vòng lặp hiện tại được tính bắt đầu từ 0 |
$loop->iteration | Lấy số lần lặp (bắt đầu từ 0) |
$loop->remaining | Số vòng lặp còn lại của vòng lặp |
$loop->count | Tổng số phần tử sẽ được duyệt trong vòng lặp |
$loop->first | Phần tử đầu tiên trong vòng lặp |
$loop->last | Phần tử cuối cùng trong vòng lặp |
$loop->even | Các phần tử đứng vị trí chẵn trong vòng lặp |
$loop->odd | Các phần tử đứng vị trí lẻ trong vòng lặp |
$loop->depth | Nesting level của các vòng lặp hiện tại |
$loop->parent | Khi vòng lặp được nested, biến này nó sẽ trả về vòng lặp cha |
Tip 7 Eloquent where date methods
Trong Eloquent, chúng ta có thể sử dụng các function whereDay(), whereMonth(), whereYear(), whereDate(), whereTime() để query thời gian một cách chính xác.
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 bên trong một group
Trong Route, chúng ta có thể tạo thêm một group bên trong chính group đó.
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 href="/cdn-cgi/l/email-protection" class="__cf_email__">[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 href="/cdn-cgi/l/email-protection" class="__cf_email__">[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 href="/cdn-cgi/l/email-protection" class="__cf_email__">[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
Nếu bạn muốn một cột trong DB tăng, chỉ cần sử dụng increment(). Cũng không nhất thiết là mỗi lần tăng lên 1, có thể tăng mỗi lần lên 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 Kiểm tra file view có tồn tại hay không ?
Bạn có thể kiểm tra xem file View có tồn tại hay khong trước khi load ra chúng
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> |
Bạn cũng có thể load ra file View đầu tiên nếu nó tồn tại trong mảng các file view được liệt kê
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> |