Sử dụng exists()
và doesntExist()
1. exists()
Thay vì:
1 2 3 4 | <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token class-name static-context">Post</span><span class="token operator">::</span><span class="token function">where</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'slug'</span><span class="token punctuation">,</span> <span class="token variable">$slug</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">count</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//...logic</span> <span class="token punctuation">}</span> |
Hãy dùng:
1 2 3 4 | <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token class-name static-context">Post</span><span class="token operator">::</span><span class="token function">where</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'slug'</span><span class="token punctuation">,</span> <span class="token variable">$slug</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">exists</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//...logic</span> <span class="token punctuation">}</span> |
2. doesntExist()
Thay vì:
1 2 3 4 | <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span> <span class="token class-name static-context">Post</span><span class="token operator">::</span><span class="token function">where</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'slug'</span><span class="token punctuation">,</span> <span class="token variable">$slug</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">count</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//...logic</span> <span class="token punctuation">}</span> |
Hãy dùng:
1 2 3 4 | <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token class-name static-context">Post</span><span class="token operator">::</span><span class="token function">where</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'slug'</span><span class="token punctuation">,</span> <span class="token variable">$slug</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">doesntExist</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//...logic</span> <span class="token punctuation">}</span> |
3. So sánh
Với mysql laravel sẽ biên dịch thành:
count()
12select count(*) as aggregate from `posts` where `slug` = 'abc'
Đếm có bao nhiêu dòng dữ liệu thỏa điều kiện. Phải chạy từ đầu đến cuối bảng dữ liệu để so sánh và đếm => chậm.exists()
12select exists(select * from `posts` where `slug` = 'abc') as `exists`
Nếu tìm thấy dòng dữ liệu thỏa điều kiện thì sẽ trả về true, nếu không thì trả về false. Trường hợp tốt nhất là dòng dữ liệu thỏa điều kiện nằm ở đầu của bảng dữ liệu.
4. Kết luận
- Tốc độ query nhanh hơn so với dùng
count()
. - Code sẽ tường minh hơn về mặt ngữ nghĩa (exists: tồn tại – does not exists: không tồn tại).
5. Tham khảo
6. Về tôi
Hi vọng chia sẻ này sẽ giúp các bạn newbie 1 phần nào trong quá trình tìm hiểu về Laravel.
Mình là Công Thành Cám ơn các bạn đa theo dõi bài viết của mình, nếu nếu có câu hỏi nào vui lòng bình luận phía dưới nhé.