自从我开始学习CakePHP 3以来,这是我一直面临的问题
这个实体的概念是什么,现实世界的例子会有所帮助。
public function add()
{
// why do we have to create new entity / what is the role of entity here.
$comment = $this->Comments->newEntity();
if ($this->request->is('post','put')) {
// why do we have to use this line after posting / what is the role of this line.
$comment = $this->Comments->patchEntity($comment,$this->request->data);
if ($this->Comments->save($comment)) {
$this->Flash->success('comment submitted successfully.');
} else {
$this->Flash->error('Sorry, comment could not be updated.');
}
}
return $this->redirect($this->referer());
}
答案 0 :(得分:6)
让我为你打开the book:
表对象表示并提供对集合的访问 对象,实体代表您的个别行或域对象 应用。实体包含持久属性和方法 操纵和访问它们包含的数据。
-
为什么我们必须创建新的实体/这里的实体角色是什么。
Cake3中的几乎所有内容(如果不是全部)都与实体一起使用,上面解释了实体是什么。您需要创建一个新实体,以便FormHelper可以使用它,AFAIR如果配置为也可以使用数组,但是应该使用该实体。
实体存在的原因是抽象数据。有些人认为实体是数据库行的代表 - 这是错误的。正如书中所说,它们可以排成一列,但不必代表一行,因为3.0 ORM也可以与其他资源一起使用。理论上,您可以拥有一个CSV数据源,每行返回一个实体。
我建议你阅读CakePHP核心中的实体代码,以便更深入地了解其他实体提供的内容,只是说他们只是"只是"一组属性是简短的想法。
为什么我们必须在发布后使用这一行/这一行的作用是什么。
将帖子数据合并到之前创建的实体中。如果您有类似的基本问题,请使用API。 See the API entry for patchEntity()
答案 1 :(得分:1)
简单来说,Entity是一组表及其关系表的记录,您可以在不触及数据库的情况下执行操作,并根据需要封装实体(表的字段)的属性。
实体的优势。
您想要的其他随机内容。
您可以对结果集进行运行时修改。只需向实体添加一个方法,即可以您想要的方式返回结果。这也意味着您可以使用组合来管理实体(yaya traits)
答案 2 :(得分:0)
尝试一下:
if ($this->request->is('post','put')) {
$data = $this->request->getData();
$comment = $this->Comments->newEntity();
$comment = $this->Comments->patchEntity($comment, $data);
$status = $this->Comments->save($comment);
if ($status) {
$this->Flash->success('comment submitted successfully.');
} else {
$this->Flash->error('Sorry, comment could not be updated.');
}
}
返回$ this-> redirect($ this-> referer());
}
我的建议是永远不要在同一函数中使用Post和Put。只是为了好习惯。当您使用ID(例如参数)进行更新时,放置效果很好。