Model 更新记录';sn-N关系

Model 更新记录';sn-N关系,model,phalcon,Model,Phalcon,我的问题与所描述和讨论的问题类似 我目前使用以下代码编辑多对多关系 模型如下: 类机器人扩展\Phalcon\Mvc\Model { 公费$id; 公共名称; 公共函数初始化() { $this->有很多( “id”、“机器人斯巴达”、“机器人id”); $this->hasManyToMany( “id”,“机器人斯巴达”,“机器人id”, “零件号”、“零件号”、“id”); } } 以下是当前控制器: 公共功能showRobot($id) { //找到当前的机器人 $robot=机器人:

我的问题与所描述和讨论的问题类似

我目前使用以下代码编辑多对多关系

模型如下:

类机器人扩展\Phalcon\Mvc\Model
{
公费$id;
公共名称;
公共函数初始化()
{
$this->有很多(
“id”、“机器人斯巴达”、“机器人id”);
$this->hasManyToMany(
“id”,“机器人斯巴达”,“机器人id”,
“零件号”、“零件号”、“id”);
}
}
以下是当前控制器:

公共功能showRobot($id)
{
//找到当前的机器人
$robot=机器人:查找($id);
//有人要求重建机器人?
如果($this->request->isPost())
{
//识别新零件
$parts=parts::findIn($this->request->getPost('parts\u id');
//(A)拆除机器人
$robot->robotsParts->delete();
//(B)创建一组新的关系
$robotsParts=array();
foreach($parts作为$part)
{
$robotPart=新的robotsParts();
$robotPart->parts\u id=$part->id;
$robotsParts[]=$robotPart;
}
//(C)为机器人分配新的关系
$robot->robotsParts=$robotsParts
//拯救
$robot->save();
}
}
@看

以下是我希望控制器的外观:

公共功能showRobot($id)
{
//查找当前机器人
$robot=机器人:查找($id);
//有人要求重建机器人?
如果($this->request->isPost())
{
//识别新零件
$parts=parts::findIn($this->request->getPost('parts\u id');
//将新零件与机器人关联
$robot->parts=$parts;
//拯救
$robot->save();
}
}
鉴于以下情况,您将如何执行此操作:

  • (A) 以前的RobotsParts记录集被新记录集替换,无需明确删除它们
  • (B) 无需明确声明新的RobotsParts记录,因为唯一需要的字段是
    parts\u id
    robots\u id
    (否则,将触发验证错误)
  • (C) 零件是分配的,而不是机器人(我不能让这个零件工作,尽管上面提到的相关帖子中说了)
出现(B)/(C)问题的原因是Phalcon没有将ResultSiteInterface注册到多个属性中

解决方法:

抽象类抽象模型扩展\Phalcon\Mvc\Model
{
公共函数集($property,$value)
{
if($value instanceof\Phalcon\Mvc\Model\resultstenterface)
{
$value=$value->filter(函数($r){
返回$r;
});
}
父项::__集($property,$value);
}
}