quang cao 1 quang cao 2
tin tức

Sử dụng recursive, bindModel và unbindModel trong cakephp

22/02/2012 - Xem: 2987

Sử dụng recursive, bindModel và unbindModel sẽ giúp mọi người kiểm soát dữ liệu lấy ra trong cakephp.

1. Sử dụng Recursive

Recursive trong cakephp thể hiện mức tham chiếu quan hệ nông, sâu giữa các bảng với nhau, trong cakephp có 4 mức thể hiện tham chiếu được thể hiện qua ví dụ sau đây:

Giả sử ta có tất cả 4 bảng bao gồm: domains, groups, users và news. Và mối quan hệ giữa các bảng như sau: Một domain có rất nhiều group, trong mỗi một group lại có rất nhiều user. Một user lại có thể đăng lên rất nhiều bài viết khác nhau. Vậy là ta có thể xác định các bảng có quan hệ tham chiếu đến nhau.

Ta có thể hình dung như sau:

table

domains

groups

users

News

domains

hasMany

groups

belongsTo

hasMany

users

belongsTo

hasMany

news

belongsTo

Giả sử ta muốn lấy dữ liệu ở bảng group theo câu lệnh $this->Group->find(‘all’). Việc sử dụng giá trị recursive sẽ cho phép ta lấy dữ liệu khác nhau.

Cú pháp sử dụng recursive trong trường hợp này là:

$this->Group->recursive = 1

Deapth

Mô tả

-1

Lấy dữ liệu ở bảng Group, không lấy thêm bất cứ bảng nào khác

0

Lấy dữ liệu ở bảng Group và dữ liệu domain tương ứng

1

Lấy dữ liệu ở bảng Group, Domain và dữ liệu ở bảng User tương ứng

2

Lấy dữ liệu ở bảng Group, Domain, User và dữ liệu ở bảng News tương ứng

Nhìn qua bảng trên ta thấy tùy từng giá trị recursive khác nhau mà cakephp thực hiện liên kết với (inner join) thích hợp. Giả sử như ta cho recursive bằng 2, có nghĩa là ta lấy ra dữ liệu của các group, dữ liệu domain tương ứng với mỗi group đó, đồng thời là một danh sách các user nằm trong từng group, trong mỗi user đấy lại lấy ra các tin tức do các user ấy đăng. Vậy có nghĩa là sẽ có 4 bảng liên kết với nhau. Với recursive là 1 thì chỉ có 3 bảng thôi.

Như vậy là tùy tường trường hợp cụ thể mà ta có thể khai báo giá trị recursive khác nhau. Trong trường hợp ta chỉ cần lấy dữ liệu từ mỗi bảng group thì ta chỉ cần khai báo giá trị recursive là -1. Nếu muốn lấy thêm dữ liệu ở bảng domain thì khai báo recursive = 0…. Việc khai báo recursive cho từng trường hợp sẽ làm tăng tốc độ query vì ta sẽ kiểm soát được số lượng các bảng liên kết với nhau.

2. Sử dụng bindModel và unbindModel

Trong một số trường hợp, với cùng một model chúng ta sẽ phải khai báo thêm một số quan hệ hoặc bỏ bớt một số quan hệ với các bảng khác, điều này xảy ra khi:

- Bạn cần giảm bớ số lượng dữ liệu và mối quan hệ của các bảng lien quan cần lấy đến, trong khi khởi tạo ở model ta đã khai báo tất cả các quan hệ ấy rồi. (ví dụ như trong model group ở trên, ta chỉ muốn lấy dữ liệu từ 2 bảng là group và user, trong khi đó theo quan hệ ta sẽ phải join đồng thời cả 3 bảng user, group và domain. Như vậy việc truy xuất dữ liệu sẽ chậm hơn)

- Bạn muốn thay đổi cách liên kết của một model xác định để sẵp xếp hoặc lọc dữ liệu liên quan.

Khi muốn thêm một liên kết ta sẽ dùng đến bindModel và khi muốn xóa một liên kết ta sẽ sử dụng unbindModel.

Giả sử giờ ta có 2 model là user và group. Một group sẽ chứa nhiều user và mỗi user nằm trong 1 group.

Trươc tiên chúng ta sẽ khai báo 2 model

 array(
'className' => 'User'
)
);
}
?>

Giờ chúng ta sẽ xem cách hoạt động của bindModel và unbindModel qua ví dụ dưới đây. Trong groupController chúng ta sẽ lấy dữ liệu của group bằng $this->Group->find(), dữ liệu sẽ lấy luôn cả dữ liệu của user. Ví dụ minh họa dưới đây sẽ cho ta hiểu rõ hơn cách sử dùng và làm việc của bindModel và unbindModel.

function someAction() {
// Lấy dữ liệu của group, ta sẽ lấy được cả dữ liệu của user trong từng group ấy
$group = $this->Group->find('all');
echo 'Lấy theo model'
debug($group);
// Bỏ quan hệ hasMany...
$this->Group->unbindModel(
array('hasMany' => array('User'))
);
// Sử dụng lại chức năng find()
// Hiên thị group, không có user
$group = $this->Group->find('all');
echo 'Bỏ quan hệ với bảng user';
debug($group);
// Thêm quan hệ hasMany...
$this->Group->bindModel(
array('hasMany' => array(
'User' => array(
'className' => 'User'
)
)
)
);
// Sử dụng lại chức năng find()
// Hiên thị group, có user
$group = $this->Group->find('all');
echo 'Thêm quan hệ với bảng user';
debug($group);
// Bỏ quan hệ hasMany lần 2...
$this->Group->unbindModel(
array('hasMany' => array('User'))
);
// Sử dụng lại chức năng find()
// Hiên thị group, không có user
$group = $this->Group->find('all');
echo 'Bỏ quan hệ với bảng user lần 2';
debug($group);
//Chú ý: unbindModel và bindModel chỉ hiệu quả
// duy nhất trong lần lấy dữ liệu tiếp theo,
// sau lần thứ 2 sẽ lấy thông tin mặc định từ model
// Chúng ta sẽ sử dụng lại hàm find('all') sau unbindModel(),
// Dữ liệu lấy ra sẽ bao gổm cả group và user
echo 'Lấy dữ liệu mặc định';
$group = $this->Group->find('all');
debug($group);
}

Cú pháp chuẩn của unbindModel

$this->Model->unbindModel(
array('associationType' => array('associatedModelClassName'))
);

Cú pháp chuẩn của bindModel

$this->Model->bindModel(
array('associationName' => array(
'associatedModelClassName' => array(
// normal association keys go here...
)
)
)
);

Sử dụng hiệu quả recursive, bindModel và unbindModel sẽ giúp mọi người tăng tốc độ truy vấn query của cakephp vì với mỗi trường hợp lấy dữ liệu tôi đã xác định rõ các bảng cần lấy và quan hệ giữa chúng, vì vậy giảm thiều việc liên kết thừa giữa các bảng mà chúng ta không cần lấy. Chúc mọi người có một ngày vui vẻ @(^_^)@


(i-php.net)

Liên kết

Tin được quan tâm nhất

Quản cáo

Tags: xo so , kqxs , xo so mien bac , ket qua xo so , ket qua xo so mien bac , so xo , xskt , ket qua so xo , xổ số miền bắc , xs , soi cau xoso , ket qua xsmb , soi cau mb , ket qua , so ket qua , kết quả xổ số , du doan xo so , xo so truc tiep , xosomienbac , soi cau mien bac , du doan xsmb , kqxs mb , xo so hom nay , du doan xo so mien bac , xổ số , soi cau lo , soxo , ket qua xo so hom nay , kết quả xổ số , kết quả , xổ số miền bắc , tần số nhịp , soi cầu lotto , lotto gan , đầu đuôi lotto , đo dàn đặc biệt , chu kỳ đặc biệt , vietlott , sx vietlott , mega , mega 6/45 , power 6/55 , jackpot mega 6/45 , jackpot power 6/55 , xổ số điện toán , xo so dien toan , xổ số mega , vietlott power , xổ số power , jackpot power , power , xổ số miền trung , kết quả xổ số miền trung , kqxs miền trung , xs miền trung , xs mt , kqxs mt , xổ số miền nam , kết quả xổ số miền nam , kqxs miền nam , xs miền nam , xs mn , kqxs mn , lịch vạn niên , xem lịch hôm nay , xem ngày , xem giờ tốt , xem ngày tốt , giờ tốt hôm nay , lịch hôm nay , giờ hoàng đạo , xem giờ hoàng đạo , thiết kế website , thiết kế web giá rẻ , thiết kế web , thiết kế logo , thiết kế ấn tượng , mẫu thiết kế , thiết kế , design website , design web , design logo , design template , design , đồ họa , lập trình , máy tính , hack , hacker , bảo mật , mạng máy tính , công nghệ , thủ thuật , facebook , like , tăng like , fanpage , phần mềm , tin học , thông tin , php , website , web , logo , template , mẫu đẹp , soi cầu mb , du doan xsmb , dự đoán xsmb , du doan xo so mien bac , du doan xs mb , du doán xsmb , xoso minh ngoc , xổ số hà nội , xổ số ha noi , xsmb 30 ngày , xsmb 30 ngay , xsmb30ngay , xo so mien bac 30 ngay , xsmb30 ngày , kết quả xổ số miền bắc hôm nay , kết quả xổ số miên bắc hôm nay , xổ số miền bắc hôm nay , xổ số miên bắc hôm nay , xô sô miên băc hôm nay , xô số miền bắc hôm nay , xổ số miền bắc , kết quả xổ số , ket qua xsmb , ket qua xo so mien bac , ket qua xs mb , xo số miền bắc , kết qua xsmb , xô sô miên băc , xổ số miên bắc , xổ số miền băc , xo so , xổ số , xô số , xôso , xổ sô , xstd , kết quả xổ số miền bắc , kết quả xổ số miên bắc , kếtquảxổ sốmiềnbắc , xsmn , xổ số miền nam , sxmn , kqxs , xổ số miền nam hôm nay , xổ số hôm nay , xo so mien nam , kqxsmn , xs mn , xô số miền nam , xs kt , xo số miền nam , kq xs , xô số hôm nay , xo số mien nam , xỗ số miền nam , xo số miền nam hôm nay , xổ so hôm nay , sxmb , xổ số miền trung , xổ số miền trung hôm nay , xs mt , xô sô miên trung hôm nay , xsmb , kqxsmb , xs mb , xổ số miền bac , kq xsmb , xổ số mien bac , xổ so miền bắc , xs minh ngọc , xsmb thu 6 , xsmb thứ 6 , xs mega , xs bd , xs vl , xo so mien bac thu 6 , xosome , sổ kết quả , quay thử xổ số miền nam , dudoan xsmn , du đoán xsmn , xổ số vietlott , soi cầu , xổ số cần thơ , dự đoán kết quả xổ số siêu chính xác hôm nay , du đoán kết quả xổ số siêu chính xác hôm nay , soi cau du doan xsmb chinh xac 100 , xo so me , xs vietlott , xổ số khánh hòa , xổ số gia lai , xổ số đắk lắk , xổ số bạc liêu , xổ số bình định , xổ số đà nẵng , trực tiếp xổ số miền nam , xsmn thứ 4 , xổ số đồng nai , xổ số thủ đô , dự đoán xổ số miền nam , xổ số miền nam thứ ba , xổ số miền nam trực tiếp , trực tiếp xổ số miền bắc , truc tiếp xổ số miền bắc , xổ số miền bắc trực tiếp , trực tiếp kết quả xổ số miền bắc , trục tiếp kết quả xổ số miền bắc , xổ số miền nam minh ngọc , soi cầu miền bắc , dự đoán xổ số miền bắc , xổ số đại phát , soi cau xo so mien bac , soi cau xs mb , xs bl , xs st , quay thử xổ số miền bắc , thống kê kết quả xổ số miền bắc 100 ngày , xổ số tiền giang , thống kê xổ số miền bắc , truc tiep xsmb , truc tiep xo so mien bac , trưc tiêp xsmb , truc tiếp xsmb , tructiep xsmb , xổ số trực tiếp miền bắc , xổ số bến tre , dd xsmb , xổ số long an , xổ số miền bắc 100 ngày , xsmn thứ 2 , xsmn thu2 , xổ số miền bắc hàng tuần , xổ số miền bắc hàng ngày , xổ số vũng tàu , xổ số miền bắc 30 ngày , xổ số miền nam chủ nhật , xổ số miền nam thứ 6 , xổ số trực tiếp , xổ số miền nam thứ 7 , kết quả xổ số mb , xổ số miền nam thứ 2 , xổ số trực tiếp miền nam , xổ số miền nam thứ tư hàng tuần , xổ số minh ngọc miền nam , xổ số đồng tháp , xổ số trực tiếp hôm nay , xổ số thành phố , xổ số miền bắc thứ sáu hàng tuần , xổ số miền , xổ số miền bắc hôm quả , xổ số tây ninh , xổ số hà nội hôm nay , xsmb truc tiep , xsmb trực tiếp , xổ số miền nam thứ hai , xổ số miền bắc thứ ba , xổ số ba miền , xổ số miền bắc ngày hôm nay , xổ số miền bắc thứ ba hàng tuần , xổ số vĩnh long , xổ số vinh long , xs mien bac , xs mien bắc , xổ số đài bắc , xổ số miền bắc hôm qua , xổ số miền bắc hom qua , xổ số phú yên , ket qua xo so , so xo mien bac , kết quả xsmb , ket qua so xo , ket qua so xo mien bac , xsmn kết quả xổ số miền nam , xo so mien bac hom nay , sổ xô miên bắc hôm nay , kết quả xổ số kiến thiết miền bắc , xs mb hom nay , so xo mien bắc , số xo mien bac , kết qua xo so , ket qua xo số , xổ số kiến thiết miền bắc , kqxs miền bắc , xsmb hôm nay , miền bắc , xổ số kiến thiết miền bắc hôm nay , xsmb xsmn kết quả xổ số miền bắc hôm nay , xổ số hôm nay miền bắc , xsktmb , xskt miền bắc , xs dt , xs mb hôm nay , kqxs mien bắc , xsmbhom nay , xsmb xsmn kết quả xổ số miền bac hôm nay , so xo , xs bt , xổ số mb , kqxs miền nam , kqxs mien nam , ket qua xs mien nam , xo số mb , xo sô mb , xosomienbac , kqxs mien bac , xoso mien bac , xổ số kiên giang , kết quả xổ số miền nam , so xo mien nam , xo so hom nay , số miền nam , xs hom nay , xổ số bình dương , xsmn hom nay , xsmn sxmn kết quả xố số miền nam hôm nay , xổ số sóc trăng , xổ số trà vinh , kết quả xổ số miền nam hôm nay , xổ số chiều nay , xổ số cà mau , xstt , xs mien nam , xổ số kiến thiết miền nam , kết quả xổ số hôm nay , xổ số hồ chí minh , xổ số kiến thiết , ket qua xo so mien nam , xổ số miền nam hôm qua , xổ số miền nam ngày hôm nay , sxmn hôm nay , xo so mn , xs3m , xshom nay , kqsxmn , xổ số ba đài , xskt hôm nay , xosomiennam , xổ số kiến thiết hôm nay , xổ số bình phước , xsbth , xs dn , xs vt , xs tg , xs tn , xskt miền nam , xs ag , xs mn hom nay , xoso mien nam , xổ số hcm , xs bth , số xo mien nam , xsmn sxmn kết quả xổ số miền nam hôm nay , xs kt hôm nay , kết quả xo so mien nam , kết quả xố số hôm nay , kết quả xổ số miền trung , xo so mien trung , so xo mien trung , xs mien trung , kết quả xổ số miền trung hôm nay , xs daklak , xs mtrung , xo so miền trung , xskt mien trung , kq xs mt , xs đăk lăk , sốmientrung , số miền bắc , kết quả xổ số miền bắc ngày hôm nay , kết quả xổ số xsmb , kqxs 30 ngày , kqxsmb hôm nay , kết quả xổ số miền bắc hôm qua , kqxs 30 ngay , sốmienbac , kq xsmb hôm nay , kqxsmb 30 ngày , du doan xsmn , xổ số an giang , xổ số quảng ngãi , xsmb 30 , xsmn thứ 5 , xsmn thứ 6 , quay thu xsmb , soi cau mn , xổ số kon tum , xsmn thứ 7 , xsmn thứ 3 , xsmb 90 ngày , quay thu xsmn , du doan mb , xsmb thu 4 , xsmb thứ 7 , xsmb thu 5 , xổ số minh ngọc hôm nay , xổ số miền bắc thứ hai hàng tuần , xsmb thu 2 , xổ số miền bắc thứ bảy hàng tuần , xổ số miền bắc chủ nhật hàng tuần , xsmn chủ nhật , xổ số hậu giang , xổ số miền bắc thứ tư hàng tuần , xsmb thứ 5 , xổ số đà lạt , xsmb thứ 3 , xsmn thu 6 , xsmb thu 3 , xổ số miền bắc thứ năm hàng tuần , xsmb minh ngoc , xsmb thu 7 , xs khanh hoa , xsmn thu 7 , xs gia lai , xsmn cn , xsmb thứ 4 , xsmb cn , ketquanet , kết quả xổ số miền bắc 30 ngày , xổ số bình thuận , xs da nang , xsmb thứ 2 , xổ số miền nam thứ 3 , xổ số miền bắc chủ nhật , xs kon tum , xsgl , xổ số miền nam thứ sáu hàng tuần , xổ số miền nam thứ tư , xổ số miền nam thứ ba hàng tuần , xổ số miền bắc minh ngọc , xổ số miền nam chủ nhật hàng tuần , xổ số miền nam thứ năm hàng tuần , quay thu mn , xổ số miền bắc thứ bảy , xổ số miền nam thứ bảy hàng tuần , xổ số miền nam thứ hai hàng tuần , xổ số miền bắc thứ hai , xổ số quảng bình , xổ số miền bắc thứ tư , xổ số miền bắc thứ sáu , xổ số miền nam thứ bảy , kết quả xổ số 30 ngày , xổ số 3 miền , xổ số chủ nhật hàng tuần , xổ số miền nam thứ năm , xổ số miền bắc thứ năm , dự đoán xổ số miền trung , ket qua xsmb 30 ngay , xổ số ninh thuận , quay thử xsmb , xổ số miền nam thứ sáu , xổ số thứ tư hàng tuần , thong ke xsmb , kết quả xsmb 30 ngày , xổ số thứ hai hàng tuần , xổ số thứ năm hàng tuần , xổ số thứ bảy hàng tuần , xổ số thứ ba hàng tuần , xsmb 200 ngày , thống kê xsmb , xổ số thứ sáu hàng tuần , xs binh dinh , xsbdi , kqxs minh ngoc , xsmb chu nhat , xstd 30 , soi cầu 666 , xổ số 30 ngày , xsmb chủ nhật , thống kê kết quả xổ số miền bắc , xsmb 90 ngay , xs quang ngai , xsmb 30 ngày gần nhất , dự đoán xsmb minh ngọc , dự đoán xsmb win2888 , truc tiep xsmn , xsmt thứ 2 , xsmb t7 , xsmn t4 , xsmb 200 ngay , soi cau wap , xsmb30 , xsmb minh ngọc , xs khánh hòa , xsmb 100 ngay , xo so phu yen , xsmn thu5 , xsmb 100 ngày , xo so binh dinh , xsmnthu4 , du doan xs , kqxs minh ngọc , xo so quang ngai , xsmnthu3 , xs py , xsmn thu4 , xsmn 30 ngay , soi cau xsmb win2888 , xs gl , xsmn thu6 , xsmnthu5 , xsmb thu3 , xs khánh hoà , xs qng , xstd30 , dự đoán mb , xsmbthu3 , xs hg , trực tiếp xsmn , xs dl , xs mb t7 , xs mn thu 7 , xs mn thu 5 , du doan xsmb win2888 , ket qua xo so mien bac 30 ngay , quay thu xs mb , xs mn thu 3 , xs mn thu 2 , xs mn thu 6 , xs mb thu 4 , xs mb cn , xs mn thu 4 , du doan xsmb minh ngoc , xs binh đinh , xo so mien bac thu 5 , xs mb thu 2 , xs mb chu nhat , dự đoán mn , quay thu xs mn , quay thu xo so mien bac , xs mt thu 2 , xs mn cn , xs khanh hòa , xs mn minh ngoc , thong ke xs mb , xs khanh hoà , dự đoán xsmb minh ngoc , dudoan mn , du đoán mb , xs truc tiep , xs trực tiếp , xs truc tiếp , max 3d , max3d , xsglai , xsmn t7 , số kết quả , xs g lai , xs mn t7 , ket qua vietlott , ket quả vietlott , kết quả vietlott , sosomienbac , kq vietlott , xổ số vietlott hôm nay , vietlott hôm nay , xs tv , xsmchung , dự đoán giải đặc biệt ngày mai , xo so online , dò vé số , dự đoán xổ số , xổ số hà nội trực tiếp , dự đoán kết quả xổ số miền bắc , xổ số me , xổ số mẹ , xô sô me , xổ số miền bắc trực tiếp hôm nay , trực tiếp xổ số miền bắc hôm nay , xổ số ba miền hôm nay , quay thử xổ số miền bắc hôm nay , trực tiếp xổ số miền nam hôm nay , kết quả xổ số vietlott , xổ số cần thơ hôm nay , soi cầu dự đoán xổ số miền bắc hôm nay , kết quả xổ số vietlott hôm nay , dự đoán kết quả xổ số , dự đoán kết quả xổ số miền bắc hôm nay , du đoán kết quả xổ số miền bắc hôm nay , soi cầu xổ số , dự đoán xổ số miền bắc hôm nay , xổ số miền nam trực tiếp hôm nay , trực tiếp kết quả xổ số miền nam , kết quả xổ số trực tiếp miền nam , dư đoán xổ số miền bắc hôm nay , du đoán xổ số miền bắc hôm nay , xổ số trực tiếp miền nam hôm nay , trực tiếp kết quả xổ số miền bắc hôm nay , trực tiếp xổ số hôm nay , soi cầu miền bắc hôm nay , dự đoán xổ số miền trung chính xác 100 , trực tiếp miền bắc , xổ số miền bắc hôm nay trực tiếp , truc tiep kết quả xổ số miền bắc hôm nay , tra cứu kết quả xổ số miền bắc , xs dien toan , xsdientoan , dự đoán xổ số miền nam hôm nay