01/10/2018, 10:37

Giúp đỡ về hướng đối tượng trong PHP MVC

Trong các project php mvc, các thuộc tính của đối tượng trong lớp model nên được xây dựng theo kiểu :

hay tạo một lớp thực thể như java và gọi đối tượng này vào lớp model để xử lý:

Ngô Quang Dương viết 12:51 ngày 01/10/2018

Kiểu thứ nhất bạn nhé.
Với cả bạn thử tìm hiểu về việc xây dựng model trong framework CodeIgniter xem cách thức - tất cả các lớp model được tạo đều thừa kế lớp CI_Model đã có sẵn trong framework.

Vô Thanh Phong viết 12:52 ngày 01/10/2018

Cám ơn nhé, mình sẽ tìm hiểu thêm

Quân viết 12:52 ngày 01/10/2018

Xin lỗi vì đào mộ nhưng mình có thắc mắc là khi mình gọi save() để lưu lại 1 user thì các thuộc tính không có data sẽ bị mất?
Các thuộc tính không có ví dụ như khi select chỉ select 1 vài trường dữ liệu như id, name, sau đó sửa name và lưu lại. Các thuộc tính không được select ra thì sẽ bị lưu lại là rỗng hoặc null vì trong array properties các trừong đó vẫn tồn tại các key.

Dark.Hades viết 12:37 ngày 01/10/2018

Bạn có thể đọc code PHP phía trên, nó thực hiện quét toàn bộ các thuộc tính của Model. Do khi khởi tạo đối tượng, tất cả đều bị cho về empty, thuộc tính nào đã bị flag là edit thì nó sẽ !empty, và khi thực hiện save() sẽ quét lại 1 lần nữa để đảm bảo chỉ update các column đã bị edit.

Trường hợp của bạn là do code chưa chú ý các trường hợp xấu nên mới gây ra update cả empty. Cách giải quyết là tạo một biến lưu các đối tượng (columns) đã bị chỉnh sửa, ngay khi thực hiện set cho đối tượng đó, ta sẽ cho tên đối tượng ấy vào biến đó nhằm xác nhận cho thằng save() biết chính xác bạn cần update đối tượng nào.

Cách này gần giống với áp dụng ORM, tuy nhiên nếu giải quyết tốt sẽ giúp bạn không cần phụ thuộc vào ORM. Được biết ORM rất thuận tiện, tuy nhiên nó rất ảnh hưởng tới performance của ứng dụng. Tìm cách giải quyết tốt trong trường hợp này giúp cải thiện không những performance mà còn cả khả năng scale của app.

Quân viết 12:42 ngày 01/10/2018

Mình cũng chưa xem ORM nhưng theo cách kiểm tra empty bên trên thì trong TH mà những filed khi update empty sẽ ko update. VD ban đầu field url là http://abc, upddate thành “” thì ko update được.

Dark.Hades viết 12:41 ngày 01/10/2018

Thì mình mới nói là bạn tạo 1 mảng, khi thực hiện setter sẽ gắn flag vào mảng đó. Lúc save thì lặp 1 vòng kiểm tra biến đó đã thực hiện set chưa, nếu rồi thì update.
Sử dụng:

$$"variable_name"

để reflect trong PHP.

Bài liên quan
0