我有一个关于使用CakePhp 3保存相关数据的问题。不幸的是,我无法弄清楚问题是什么。我的场景非常简单。我想保存以下请求数据:
$data = [
'name' => 'article 1',
'comments' => [
(int) 0 => [
'description' => 'comment 1'
]
]
]
在这种情况下。我想用新的注释实体保存一个新的文章实体。所以对于这两个实体来说,它是表中的新记录。所以有条款表和评论表,其中每个评论都与文章表有关联。
ArticlesTable.php
$this->hasMany('Comments', [
'foreignKey' => 'article_id'
]);
CommentsTable.php
$this->belongsTo('Articles', [
'foreignKey' => 'article_id',
'joinType' => 'INNER'
]);
修补文章
$article = $this->Articles->patchEntity($article, $data, [
'associated' => [
'Comments'
]
]);
调试打印 - 修补文章
object(App\Model\Entity\Article) {
'name' => 'article 1',
'comments' => [
(int) 0 => object(App\Model\Entity\Comment) {
'description' => 'comment 1',
'[new]' => true,
'[accessible]' => [
'*' => true
],
'[dirty]' => [
'description' => true
],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[invalid]' => [],
'[repository]' => 'Comments'
}
],
'[new]' => true,
'[accessible]' => [
'*' => true
],
'[dirty]' => [
'name' => true,
'duration' => true,
'comments' => true
],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[invalid]' => [],
'[repository]' => 'Articles'
}
SQL错误:
错误:SQLSTATE [42000]:语法错误或访问冲突:1064您 您的SQL语法有错误;检查对应的手册 您的MySQL服务器版本,以便使用接近'描述的正确语法, 创建,修改)VALUES(3,'评论1',' 2017-05-22 20:36:59',' 2017-05-22 20:3'在第1行
SQL查询:
BEGIN
INSERT INTO articles (name, created, modified)
VALUES
(
'article 1', '2017-05-22 20:36:59',
'2017-05-22 20:36:59'
)
INSERT INTO comments (
article_id, description, created, modified
)
VALUES
(
3, 'comment 1', '2017-05-22 20:36:59', '2017-05-22 20:36:59'
)
ROLLBACK
这里非常详细地介绍了我正在做的事情。我只是困惑,因为我记得这是我在Cakephp 3中一直这样做的方式。抱歉问这么简单的问题。我无法弄明白。我在这里想念一下吗?有人能看出我的错吗?
答案 0 :(得分:1)
你不需要为cakephp3中的简单实体插入编写SQL查询,请查看https://book.cakephp.org/3.0/en/orm/saving-data.html
在您的文章添加操作中,您应该使用$ this-> Articles-> save();
if $this->request->is('post') {
$article = $this->Articles->newEntity($this->request->data());
$this->Articles->save($article);
}