nếu bắt buộc bạn cần dùng lazy loading thì trước khi render page bạn có thể dùng regex để chuyển cái src của bạn thành data-origin. nhưng dùng regex không cẩn thận có thể làm chậm hơn.
Bạn ơi, mình làm phiền bạn thêm chút xíu nữa, trường hợp nếu mình khai báo hàm foo() bên trong hàm barr(), tức là code sẽ như thế này:
function bar() {
var a = 3;
function foo() {
var a = 2; //=> khi bỏ dòng này đi
console.log(a);
}
}
var a = 'Ahihi';
bar();
Tại sao khi bỏ dòng var a= 2 thì nó lại không log ra giá trị nào cả. Mình tưởng hàm foo() nằm trong Scope của hàm bar() nên nó có quyền truy cập vào biến var a = 3 => tức là nó sẽ in ra giá trị 3 chứ nhỉ. Trường hợp này giải thích thế nào hả bạn ?
Tất nhiên, sau khi bạn git add rồi commit ngay thì sẽ không sao. Còn bạn git add, xong sau đó vào chỉnh sửa file trong thư mục source thì git ko băm phần edit mới đó nhé, mà chỉ băm version bạn đã git add thôi.
Để tường minh mình sẽ có một folder test, bên trong có chứa 1 file test_commit.rb, trong file này có đoạn text this is test file. cd đến folder test, chạy git init sẽ có folder .git
Hiện tại bên trong folder objects ở trong .git có thể được coi là trống trơn
Sau đó thực hiện commit
$ git commit -m 'First time init'
Lúc này sẽ thấy thay đổi bên trong folder objects
Bạn chưa add mà, chỗ này nó sẽ không commit được.
$ git log --oneline
# Log commit
c83dd69 First time init
(END)
Nó sẽ ra như này:
LongNX@LPP00039344K MINGW64 ~/OneDrive/OneDrive - FPT Software/App/GoTiengViet (master)
$ git log --oneline
fatal: your current branch 'master' does not have any commits yet
Cám ơn bài viết của bạn.
Mình có thấy vài chỗ nhầm lẫn trong bài nên cho mình list ra nhé
Tính bảo mật
Eloquent ORM có tính bảo mật cao hơn QueryBuilder trong việc phòng chống SQL Injection.
Cái này chắc bạn đang nói đến kiểu viết bên dưới nhỉ
DB:raw('select * from users where id ='.$id);
Chúng ta có thể dùng PDO parameter binding để tránh khả năng SQL bị tấn công, nên mình nghĩ để tránh thì phải quán triệt dùng PDO binding với các bạn developer trong team
Vd:
DB::select('select * from users where id = :id',['id'=>$id]);
Note: Cẩn thận với whereRaw trong DB facade vì query sẽ không được escape
Hình như ví dụ này đã bị out of date so với version 5.6
Với Eloquent thì mình nghĩ sẽ dùng hàm pluck
User::pluck('name');
Còn với Query builder chúng ta dùng select thay vì dùng hàm lists (hàm list đã bị deprecated từ 5.3 thì phải)
DB::table('users')->select('name')->get();
Lưu ý đối tượng trả về là Laravel Collection chứ không phải array thông thường
8.Delete
$user->destroy();
Hàm destroy phải gọi static function chứ không phải instance function, và hàm destroy nhận vào ID của record muốn delete.
User::destroy(1);
Ngoài ra mình đồng tình với việc cú pháp code của Eloquent dễ hiểu hơn (về mặt business).
(Hiệu suất thì mình chưa bandwidth nên cũng chưa khẳng định được )
Nhưng thấy hơi không rõ ràng ở chỗ
Eloquent ORM dễ dàng kết nối với database hơn QueryBuilder.
Theo mình hiểu thì Eloquent, đến cuối cùng khi giao tiếp với tầng Database thì cũng sử dụng Query Builder
Chúng ta có thể tham khảo class Illuminate\Database\Eloquent\Builder để thấy rằng cuối cùng Eloquent cũng sử dụng Query Builder khi tương tác với DB
Có nghĩa là Eloquent là một wrapper về mặt business cho Query Builder, làm cho code dễ đọc hơn, và cũng cung cấp nhiều business methods hơn QueryBuilder như Eloquent Relationships, Soft delete, Eloquent Events...
Nên khi nói đến tính dễ dàng kết nối, mình nghĩ ORM base trên Query Builder nên sẽ không đánh giá.
THẢO LUẬN
that's right
Em cám ơn anh ạ... ChuChoa.. cái này là tricky khủng nhất mà e từng xem..
Session sẽ mất khi Session time out nhé. Hoặc là khi phía server cố tình remove nó khi user log out chẳng hạn.
@minhtuancnttk39 Cách làm a update lại vào trong answer rồi nha. Bonus luôn cái ảnh gif demo nữa.
hay
phần 3 sao lâu zậy bạn ?
nếu bắt buộc bạn cần dùng lazy loading thì trước khi render page bạn có thể dùng
regex
để chuyển cái src của bạn thành data-origin. nhưng dùng regex không cẩn thận có thể làm chậm hơn.Nice post!
xử lý theo cách bất đồng bộ thôi, async vs await chẳn hạn
bài viết hay quá em (y)
Dạ, e biết cái đó ạ, nhưng em không thêm được mấy cái font-awesome ấy a.
A có cách gì không ạ?
ờ ha, cám ơn bạn nhiều
Giờ mới biết công ty product lại không thích nhân sự outsourcing đấy ^^
Góp ý: không nên dịch
product owner
thànhchủ sản phẩm
, một số từ chuyên môn nên được dùng từ gốc tiếng Anh thay vì dịch.=)) bạn phải chạy hàm
foo()
bên trongbar
nữa chứ. Mỗi khai báo thì làm sao nó chạy đượcđẹp giai thế
Bạn ơi, mình làm phiền bạn thêm chút xíu nữa, trường hợp nếu mình khai báo hàm
foo()
bên trong hàmbarr()
, tức là code sẽ như thế này:Tại sao khi bỏ dòng
var a= 2
thì nó lại khônglog
ra giá trị nào cả. Mình tưởng hàmfoo()
nằm trongScope
của hàmbar()
nên nó có quyền truy cập vào biếnvar a = 3
=> tức là nó sẽ in ra giá trị3
chứ nhỉ. Trường hợp này giải thích thế nào hả bạn ?nice!
Bạn chưa add mà, chỗ này nó sẽ không commit được.
Nó sẽ ra như này:
Cám ơn bài viết của bạn. Mình có thấy vài chỗ nhầm lẫn trong bài nên cho mình list ra nhé
Cái này chắc bạn đang nói đến kiểu viết bên dưới nhỉ
Chúng ta có thể dùng PDO parameter binding để tránh khả năng SQL bị tấn công, nên mình nghĩ để tránh thì phải quán triệt dùng PDO binding với các bạn developer trong team
Vd:
Note: Cẩn thận với
whereRaw
trong DB facade vì query sẽ không được escapeHình như ví dụ này đã bị out of date so với version 5.6
Với Eloquent thì mình nghĩ sẽ dùng hàm pluck
Còn với Query builder chúng ta dùng
select
thay vì dùng hàmlists
(hàm list đã bị deprecated từ 5.3 thì phải)Hàm destroy phải gọi static function chứ không phải instance function, và hàm destroy nhận vào ID của record muốn delete.
Ngoài ra mình đồng tình với việc cú pháp code của Eloquent dễ hiểu hơn (về mặt business). (Hiệu suất thì mình chưa bandwidth nên cũng chưa khẳng định được ) Nhưng thấy hơi không rõ ràng ở chỗ
Theo mình hiểu thì Eloquent, đến cuối cùng khi giao tiếp với tầng Database thì cũng sử dụng Query Builder
Chúng ta có thể tham khảo class
Illuminate\Database\Eloquent\Builder
để thấy rằng cuối cùng Eloquent cũng sử dụng Query Builder khi tương tác với DBCó nghĩa là Eloquent là một wrapper về mặt business cho Query Builder, làm cho code dễ đọc hơn, và cũng cung cấp nhiều business methods hơn QueryBuilder như Eloquent Relationships, Soft delete, Eloquent Events...
Nên khi nói đến tính dễ dàng kết nối, mình nghĩ ORM base trên Query Builder nên sẽ không đánh giá.