我正在阅读 CakePHP 文档,但我不确定是否需要使用find. 例子:
在我的控制器中,我想提供一个过滤列表,Orders其中state相关表的字段OrderStates是“打开”的:
$orders = $this->ItemsDeliveryNotes->Orders->find('list', [
'limit' => 200,
'conditions' => ['Orders.order_state.state' => 'Open'],
'contain' => ['OrderStates']
]);
但它说它没有找到该列order_state。这里表的定义Orders:
创建
CREATE TABLE orders (
id int(11) NOT NULL AUTO_INCREMENT,
customer_id int(11),
orderNumber varchar(255) NOT NULL,
orderDate date,
order_state_id int(11),
PRIMARY KEY (id),
KEY order_state_id (order_state_id),
CONSTRAINT orders_ibfk_1 FOREIGN KEY (customer_id) REFERENCES customers (id) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT orders_ibfk_2 FOREIGN KEY (order_state_id) REFERENCES order_states (id) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
实体
class Order extends Entity
{
protected $_accessible = [
'orderNumber' => true,
'orderDate' => true,
'customer_id' => true,
'order_state_id' => true,
'customer' => true,
'order_state' => true,
'items' => true
];
}
桌子
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('orders');
$this->setDisplayField('orderNumber');
$this->setPrimaryKey('id');
$this->belongsTo('Customers', [
'foreignKey' => 'customer_id'
]);
$this->belongsTo('OrderStates', [
'foreignKey' => 'order_state_id'
]);
$this->hasMany('Items', [
'foreignKey' => 'order_id'
]);
}
public function buildRules(RulesChecker $rules)
{
$rules->add($rules->existsIn(['order_state_id'], 'OrderStates'));
$rules->add($rules->existsIn(['customer_id'], 'Customers'));
return $rules;
}
和OrderStates:
创建
CREATE TABLE order_states (
id int(11) NOT NULL AUTO_INCREMENT,
state varchar(255) NOT NULL,
badge varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
实体
class OrderState extends Entity
{
protected $_accessible = [
'state' => true,
'badge' => true
];
}
桌子
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('order_states');
$this->setDisplayField('state');
$this->setPrimaryKey('id');
}
该列order_state可在其中访问Orders,我还将相关表 ( OrderStates) 添加到contain选项中。我还想念什么?