在cakephp-4.x中,我无法访问复合主键表的控制器视图操作。(http://localhost:8765/invoice-items/view/1)
以下是cake bake
创建的代码示例:
InvoiceItemsTable类,其中主键定义为组合。
class InvoiceItemsTable extends Table
{
/**
* Initialize method
*
* @param array $config The configuration for the Table.
* @return void
*/
public function initialize(array $config): void
{
parent::initialize($config);
$this->setTable('invoice_items');
$this->setDisplayField(['item_id', 'invoice_id', 'unit_id']);
$this->setPrimaryKey(['item_id', 'invoice_id', 'unit_id']);
$this->addBehavior('Timestamp');
$this->belongsTo('Items', [
'foreignKey' => 'item_id',
'joinType' => 'INNER',
]);
$this->belongsTo('Invoices', [
'foreignKey' => 'invoice_id',
'joinType' => 'INNER',
]);
$this->belongsTo('Units', [
'foreignKey' => 'unit_id',
'joinType' => 'INNER',
]);
}
...
发票项控制器视图方法:
/**
* View method
*
* @param string|null $id Invoice Item id.
* @return \Cake\Http\Response|null|void Renders view
* @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
*/
public function view($id = null)
{
$invoiceItem = $this->InvoiceItems->get($id, [
'contain' => ['Items', 'Invoices', 'Units'],
]);
$this->set(compact('invoiceItem'));
}
最后是phpmyadmin中invoice_items
表结构的屏幕截图:
我尝试访问类似于(http://localhost:8765/invoice-items/view/1,1,6)的视图,但我得到了相同的错误... with primary key ['1,1,6'].
我不知道如何表示URL中的组合主键?或者是什么问题?
我使用的是CakePHP版本4.4.2
1条答案
按热度按时间ylamdve61#
Table::get()
需要将组合键作为数组传递,例如[1, 1, 6]
。假设您使用的是默认应用框架中的回退路由,则可以将其他参数作为路径部分传递,例如:
并在控制器操作中接受它们,例如:
并相应地从构建一个数组以传递给
get()
作为“id”:如果您使用的是带有固定参数的自定义路线,则可以按您喜欢的任何形式添加其他路线,例如使用破折号:
则您的URL将如下所示:
另请参阅
*操作手册〉路线〉路线元素
*Cookbook〉路由〉将参数传递给操作
*操作手册〉路由〉回退方法