gpt4 book ai didi

php - CakePHP 如何检索带条件的 HABTM 数据?

转载 作者:可可西里 更新时间:2023-10-31 22:07:35 24 4
gpt4 key购买 nike

我使用 CakePHP 2.2.2我有 3 个表:restaurants、kitchens 和 kitchens_restaurants - HABTM 的连接表。

在 Restaurant 模型中我有:

public $hasAndBelongsToMany = array(
'Kitchen' =>
array(
'className' => 'Kitchen',
'joinTable' => 'kitchens_restaurants',
'foreignKey' => 'restaurant_id',
'associationForeignKey' => 'kitchen_id',
'unique' => true,
'conditions' => '',
'fields' => 'kitchen',
'order' => '',
'limit' => '',
'offset' => '',
),

问题是我的主页有单独的 Controller ,我需要在其中从具有复杂条件的模型中检索数据。

我加了

public $uses = array('Restaurant');

到我的主页 Controller ,这是我需要您的建议的部分。

我只需要选择那些 kitchen = $id 的餐厅。我尝试添加

public function index() {   
$this->set('rests', $this->Restaurant->find('all', array(
'conditions' => array('Restaurant.active' => "1", 'Kitchen.id' => "1")
)));

}

我得到 SQLSTATE[42S22]: Column not found: 1054 Unknown column in 'where clause' 错误。显然我需要从“HABTM 连接表”中获取数据,但我不知道如何获取数据。

最佳答案

TLDR:

检索根据 [ HABTM ] 条件限制的数据的关联,需要使用[ Joins ] .

解释:

下面的代码遵循[ Fat Model/Skinny Controller ]咒语,所以逻辑大部分都在模型中,只是从 Controller 调用。

注意:如果您遵循 [ CakePHP conventions ],则不需要所有这些 HABTM 参数(看来你是)。

下面的代码没有经过测试(我在这个网站上写的),但它应该非常接近并且至少让你朝着正确的方向前进。

代码:

//餐厅模型

public $hasAndBelongsToMany = array('Kitchen');

/**
* Returns an array of restaurants based on a kitchen id
* @param string $kitchenId - the id of a kitchen
* @return array of restaurants
*/
public function getRestaurantsByKitchenId($kitchenId = null) {
if(empty($kitchenId)) return false;
$restaurants = $this->find('all', array(
'joins' => array(
array('table' => 'kitchens_restaurants',
'alias' => 'KitchensRestaurant',
'type' => 'INNER',
'conditions' => array(
'KitchensRestaurant.kitchen_id' => $kitchenId,
'KitchensRestaurant.restaurant_id = Restaurant.id'
)
)
),
'group' => 'Restaurant.id'
));
return $restaurants;
}

//任何 Controller

public function whateverAction($kitchenId) {
$this->loadModel('Restaurant'); //don't need this line if in RestaurantsController
$restaurants = $this->Restaurant->getRestaurantsByKitchenId($kitchenId);
$this->set('restaurants', $restaurants);
}

关于php - CakePHP 如何检索带条件的 HABTM 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12450707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com