Laravel có lẽ không còn xa lạ gì với những PHP Developer nữa rồi, đó là một framework theo mình đánh giá có lẽ là tốt nhất hiện này của PHP với rất nhiều tính năng. Nhưng không phải tất cả những thứ mà Laravel làm được đều có ở trong documentation của nó. Dưới đây sẽ là một vài tính năng mà có thể bạn sẽ chưa được biết
1. getOriginal()
Sau khi làm thay đổi một biến lấy từ Model bằng cách gán giá trị mới cho phần tử của nó, bạn vẫn có thể lấy được giá trị ban đâu của phần tử đó ra bằng cách sử dụng getOriginal
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token variable">$post</span> <span class="token operator">=</span> 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">$id</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">dump</span><span class="token punctuation">(</span><span class="token variable">$post</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 comment">//Đây là tiêu đề bài viết</span> <span class="token variable">$post</span><span class="token operator">-</span><span class="token operator">></span><span class="token property">title</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'Đây là tiêu đề đã được chỉnh sửa'</span><span class="token punctuation">;</span> <span class="token function">dump</span><span class="token punctuation">(</span><span class="token variable">$post</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 comment">//'Đây là tiêu đề đã được chỉnh sửa</span> <span class="token function">dump</span><span class="token punctuation">(</span><span class="token variable">$post</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">getOriginal</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'title'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">//Đây là tiêu đề bài viết </span> <span class="token function">dump</span><span class="token punctuation">(</span><span class="token variable">$post</span><span class="token punctuation">)</span> <span class="token comment">//Kết quả ban đầu của $post</span> |
2. isDirty()
Kiểm tra xem giá trị của một biến lấy từ Model có bị thay đổi không (Nghe như là đang xem tâm hồn đã bị vấy bản chưa vậy )
1 2 3 4 5 6 7 8 9 10 | <span class="token variable">$post</span> <span class="token operator">=</span> 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">$id</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">dump</span><span class="token punctuation">(</span><span class="token variable">$post</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">isDirty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">//false</span> <span class="token variable">$post</span><span class="token operator">-</span><span class="token operator">></span><span class="token property">title</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'Đây là tiêu đề đã được chỉnh sửa'</span><span class="token punctuation">;</span> <span class="token function">dump</span><span class="token punctuation">(</span><span class="token variable">$post</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">isDirty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">//true</span> <span class="token function">dump</span><span class="token punctuation">(</span><span class="token variable">$post</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">isDirty</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'title'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">//true</span> <span class="token function">dump</span><span class="token punctuation">(</span><span class="token variable">$post</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">isDirty</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'content'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">//false</span> |
3. Thay đổi tên cột ‘deleted_at’
Nếu bạn sử dụng solf delete
trong Laravel thì thời gian dữ liệu của bạn bị xoá sẽ được lưu vào cột deleted_at
. Nếu bạn muốn đổi tên cột đó thì hãy làm như sau nhé
1 2 3 4 5 6 7 | <span class="token keyword">class</span> <span class="token class-name">Post</span> <span class="token keyword">extends</span> <span class="token class-name">Model</span> <span class="token punctuation">{</span> <span class="token keyword">use</span> <span class="token package">SoftDeletes</span><span class="token punctuation">;</span> <span class="token keyword">const</span> <span class="token constant">DELETED_AT</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'delete_time'</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
4. push()
Bạn có thể lưu lại giá của của một kết quả lấy từ model và quan hệ của nó. Mình sẽ có quan hệ giữa bài viết và tác giả là 1 nhiều: 1 bài viết sẽ có 1 tác giả. Ở trong model Post
1 2 3 4 5 6 7 8 | <span class="token keyword">class</span> <span class="token class-name">Post</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">author</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">belongTo</span><span class="token punctuation">(</span>Author<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 punctuation">}</span> |
Đoạn xử lý sẽ như sau
1 2 3 4 5 | <span class="token variable">$post</span> <span class="token operator">=</span> 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">$id</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$post</span><span class="token operator">-</span><span class="token operator">></span><span class="token property">title</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'Title 1'</span><span class="token punctuation">;</span> <span class="token variable">$post</span><span class="token operator">-</span><span class="token operator">></span><span class="token property">author</span><span class="token operator">-</span><span class="token operator">></span><span class="token property">last_action_time</span> <span class="token operator">=</span> Carbon<span class="token punctuation">:</span><span class="token punctuation">:</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">toDateTimeString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$post</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">push</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//Cập nhập cả 2 bảng posts và authors trong DB</span> |
5. is()
Giúp bạn kiểm tra trùng 2 giá trị từ model
1 2 3 4 5 6 7 | <span class="token variable">$post</span> <span class="token operator">=</span> 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 number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$samePost</span> <span class="token operator">=</span> 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 number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$otherPost</span> <span class="token operator">=</span> 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 number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">dump</span><span class="token punctuation">(</span><span class="token variable">$post</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">is</span><span class="token punctuation">(</span><span class="token variable">$samePost</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//true;</span> <span class="token function">dump</span><span class="token punctuation">(</span><span class="token variable">$post</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">is</span><span class="token punctuation">(</span><span class="token variable">$otherPost</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//false;</span> |
6. replicate()
Bạn có thể sao chép một giá trị của một model và lưu lại thành một bản ghi mới;
1 2 3 4 | $post = Post::find($id); $copiedPost = $post->replicate(); $copiedPost->save(); |
7. Chọn ra những giá trị cần lấy từ find()
Bạn có thể chỉ lấy ra những giá trị bạn muốn, nó sẽ giống như việc thay vì bạn select * from
thì bạn select column1, column2, ... from
1 2 3 | <span class="token variable">$post</span> <span class="token operator">=</span> 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">$id</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token single-quoted-string string">'title'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'content'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$post</span> <span class="token operator">=</span> Post<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 single-quoted-string string">'title'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'content'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
Trên đây là một vài thứ mình nghĩ sẽ giúp ích cho bạn, cảm ơn các bạn đã đọc
Tham khảo: https://medium.com/@JinoAntony/10-hidden-laravel-eloquent-features-you-may-not-know-efc8ccc58d9e