Quá nhiều lập trình viên cố gắng giới hạn bản thân với chức năng của một khuôn khổ. KHÔNG. Sử dụng những gì khuôn khổ cung cấp. Nếu nó không có các chức năng mà bạn tìm kiếm, sau đó một trong hai:
- Mã chức năng bạn cần vào một phần mở rộng lớp
hoặc
- Tuỳ chỉnh quay mã trong khuôn khổ cho phù hợp bạn cần.
Thông thường, các nhà phát triển cố gắng búa một hình vuông vào lỗ tròn và gió lên làm quá nhiều công việc thêm mà thực sự chỉ làm cho mã phức tạp. Hãy lùi lại một bước và hỏi tại sao bạn đang sử dụng khuôn khổ để bắt đầu. Nó mang cấu trúc đến một ngôn ngữ phi cấu trúc. Nó cung cấp nền tảng tái sử dụng vững chắc để xây dựng ứng dụng của bạn trên đó. Nó không phải là một hộp để đặt mình vào và bị hạn chế.
UPDATE: Tôi mất một phút để đọc Complex Find Conditions và tìm thấy câu trả lời của bạn:
$joins = array(
array(
'table' => 'test_twos',
'alias' => 'TestTwo',
'type' => 'LEFT',
'conditions' => array(
'TestTwo.id = TestOne.id',
)
),
array(
'table' => 'test_threes',
'alias' => 'TestThree',
'type' => 'LEFT',
'conditions' => array(
'TestThree.id = TestOne.id',
)
)
);
$dbo = $this->getDataSource();
$subQuery = $dbo->buildStatement(
array(
'fields' => array('*'),
'table' => $dbo->fullTableName($this),
'alias' => 'TestOne',
'limit' => null,
'offset' => null,
'joins' => $joins,
'conditions' => null,
'order' => null,
'group' => null
),
$this->TestOne
);
$query = $subQuery;
$query .= ' UNION ';
$joins = array(
array(
'table' => 'test_twos',
'alias' => 'TestTwo',
'type' => 'LEFT',
'conditions' => array(
'TestTwo.id = TestOne.id',
)
),
array(
'table' => 'test_threes',
'alias' => 'TestThree',
'type' => 'RIGHT',
'conditions' => array(
'TestThree.id = TestOne.id',
)
)
);
$dbo = $this->getDataSource();
$subQuery = $dbo->buildStatement(
array(
'fields' => array('*'),
'table' => $dbo->fullTableName($this),
'alias' => 'TestOne',
'limit' => null,
'offset' => null,
'joins' => $joins,
'conditions' => null,
'order' => null,
'group' => null
),
$this->TestOne
);
$query .= $subQuery;
pr($query);
Có bất kỳ lý do tại sao bạn muốn tránh $ this-> truy vấn? – Stoosh
Vâng, đối với một, nó đánh bại mục đích của việc sử dụng một khuôn khổ nếu bạn không cố gắng viết một ứng dụng theo kiểu gốc của khung công tác. Và hầu hết các truy vấn 'SELECT' có thể được thực hiện bằng cách sử dụng' find() 'trong 1.3.Ngoài ra, 'find()' lợi ích từ sự bảo vệ được tích hợp sẵn của trình điều khiển nguồn dữ liệu chống lại việc tiêm SQL, trong khi 'truy vấn()' là một truy vấn trực tiếp mà bạn phải thoát khỏi chính mình. Điều đó nói rằng, 'UNION' có lẽ là một trong số ít các lớp truy vấn mà bạn không thể thực hiện bằng cách sử dụng' find() '. –
Bạn có một ví dụ hợp lệ về MySQL mà bạn đang chạy không? Danh sách được liệt kê không hoạt động. –