CakePHP 3不提交forgeign键字段值

时间:2017-01-24 23:00:45

标签: cakephp

我有以下2个表,以及从

生成的默认类
bin/cake bake all clients
bin/cake bake all clients_address

当我尝试添加地址时,设置" client_id"到1,我收到以下错误。

Error: SQLSTATE[HY000]: General error: 1364 Field 'client_id' doesn't have a default value

If you are using SQL keywords as table column names, you can enable identifier quoting for your database connection in config/app.php.

SQL Query:

INSERT INTO clients_address (address_line_1, address_line_2, address_line_3, town, county, postcode, email, tel, contact_name, default_address) VALUES (:c0, :c1, :c2, :c3, :c4, :c5, :c6, :c7, :c8, :c9)

是否需要一些额外的代码才能提交client_id?

CREATE TABLE `clients` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `clients_address` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `address_line_1` varchar(30) NOT NULL,
    `address_line_2` varchar(30) NOT NULL,
    `address_line_3` varchar(30) NOT NULL,
    `town` varchar(30) NOT NULL,
    `county` varchar(30) NOT NULL,
    `postcode` varchar(8) NOT NULL,
    `email` varchar(50) NOT NULL,
    `tel` varchar(13) NOT NULL,
    `contact_name` varchar(40) NOT NULL,
    `client_id` int(11) NOT NULL,
    `default_address` BOOLEAN NOT NULL DEFAULT 0,
        FOREIGN KEY (client_id) REFERENCES clients(id),
    PRIMARY KEY (`id`)
);
INSERT INTO `clients` (`id`, `name`) VALUES (1, 'First Client');

2 个答案:

答案 0 :(得分:0)

clients_address表架构client_id int(11) NOT NULL中,设置。但是,当您插入地址时,您不会针对client_id设置值,而client_id不能是NULL

可能是解决方案

  1. 在地址插入查询中设置client_id
  2. 在您的表架构中,client_id允许NULL或设置默认值

答案 1 :(得分:0)

你需要确保" client_id"已发送。检查History上的Debug Kit栏,选择POST请求,然后转到Sql log。

必须有这样的查询:

INSERT INTO clients_address (
  client_id, address, modified
) 
VALUES 
  (
    61, 'my address', "123..."
  )

如果没有,表格可能有问题。 您的查询必须是这样的:

INSERT INTO clients_address (address_line_1, ..., contact_name, CLIENT_ID, default_address)
VALUES (:c0, :c1, :c2, :c3, :c4, :c5, :c6, :c7, :c8, :c9)

如果要单独添加地址(地址控制器添加方法),则必须规定" client_id"在Form上手动,或者从基于参数的隐藏字段,使用Cake烘焙它将在添加和编辑方法上列出客户端。

如果您要将客户端表单中的地址添加为关联,那么CakePHP上的文档就是一些很好的示例https://book.cakephp.org/3.0/en/views/helpers/form.html#creating-inputs-for-associated-data