【发布时间】:2019-05-17 08:57:52
【问题描述】:
我正在阅读 CakePHP 文档,但我不确定是否需要使用 find 以外的其他方法。示例:
在我的控制器中,我想提供Orders 的过滤列表,其中相关表OrderStates 的state 字段为“打开”:
$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 选项。我还想念什么?
【问题讨论】: