Tôi sử dụng CakePHP 2.2.2 Tôi có 3 bảng: nhà hàng, nhà bếp và bếp_restaurants - tham gia bàn cho HABTM.CakePHP cách truy xuất dữ liệu HABTM với các điều kiện?
Trong mô hình nhà hàng tôi có:
public $hasAndBelongsToMany = array(
'Kitchen' =>
array(
'className' => 'Kitchen',
'joinTable' => 'kitchens_restaurants',
'foreignKey' => 'restaurant_id',
'associationForeignKey' => 'kitchen_id',
'unique' => true,
'conditions' => '',
'fields' => 'kitchen',
'order' => '',
'limit' => '',
'offset' => '',
),
Vấn đề là tôi có bộ điều khiển riêng biệt cho trang chính của tôi trong đó tôi cần phải lấy dữ liệu từ các mô hình này với điều kiện phức tạp.
tôi thêm
public $uses = array('Restaurant');
để điều khiển trang chính của tôi và ở đây có một phần mà tôi cần lời khuyên của bạn.
Tôi chỉ cần chọn những nhà hàng có nhà bếp = $ id. Tôi đã cố gắng thêm
public function index() {
$this->set('rests', $this->Restaurant->find('all', array(
'conditions' => array('Restaurant.active' => "1", 'Kitchen.id' => "1")
)));
}
và tôi đã nhận SQLSTATE [42S22]: Cột không tìm thấy: 1054 Unknown cột trong 'mệnh đề where' lỗi. Rõ ràng là tôi cần lấy dữ liệu từ "bảng tham gia HABTM" nhưng tôi không biết làm thế nào.
Dave, cảm ơn bạn. Mã của bạn hoạt động rất tốt. Một câu hỏi nhỏ - chỉ có thể chọn các trường tôi muốn (ví dụ: tôi chỉ cần tên công ty và một số thông tin khác, không phải tất cả các trường)? Tôi đã cố gắng thêm 'fields' => array ('Restaurant.companyname') vào hàm getRestaurantsByKitchenId (trong mô hình Nhà hàng) nhưng nó không gây ra bất kỳ hiệu ứng nào. – user1327
@ user1327 - Rất vui được trợ giúp. Có, bạn sẽ có thể thêm 'fields' => array() vào phương thức Model. Chỉ cần đặt nó ở cấp độ tương tự như 'tham gia' (không phải trong vòng). Bạn luôn có thể sử dụng DebugKit để dễ dàng xem những truy vấn nào đang được chạy và có thể tinh chỉnh dựa trên đó. – Dave
Ồ, ngớ ngẩn tôi. Bây giờ mọi thứ hoạt động như tôi muốn. Cảm ơn bạn một lần nữa. – user1327