繁体   English   中英

Phalcon框架-添加相关模型

[英]Phalcon framework - add related models

我有一个对象Request ,它与RequestItem有很多关系(别名为items )。 所以Request->items是一个简单的结果集。

我在文档中看到有一种方法可以使用update()更新相关记录,并使用delete()删除相关记录。 有没有办法以类似的方式添加相关记录? 我只尝试了$ this-> items [] = $ Item,但是收到了“游标是不可变的ArrayAccess对象”错误。

我基本上想简单地向Request添加一个新的相关记录,并让Request-> item反映添加的内容。 我无法在文档中找到任何内容,这实际上使我感到惊讶。

目前,这个问题已有一年多的历史了。 新的答案既不必要又无济于事

当您具有一对多关系并且要添加新项目时,必须使用要添加的对象设置数组。 例:

$Request = new Request();
// ... sets the attributes for Request object
$item1 = new RequestItem();
$item1->attr1 = $value1; 
// ... add the attributes you want
$item2 = new RequestItem();
$item2->attr1 = $value2;
// ... and so on
$items = array($item1, $item2 /*, ... all that you need */);
$Request->items = $items;
if ($Request->save()) {
    echo 'Good';
}

您必须在RequestItem模型中初始化belongsTo(Request)。 添加时,您创建

$newItem = new RequestItem();
$newItem->setRequest($request);
$newItem->create();

那么您将能够使用$ request-> getItems();获取所有项目。

请告诉我您的数据库表结构的完整说明。

并且您在此页面中使用最多的方法: http : //docs.phalconphp.com/pt/latest/reference/models.html#defining-relationships

class Request extends \Phalcon\MVC\Model
{
  public function initialize()
  {
    $this->hasMany('id', 'RequestItem', 'request_id');
  }
}

$ this-> hasMany(' 主模型外键 ',' 相关模型名称 ',' 相关外键 ');

class RequestItem extends \Phalcon\MVC\Model
{
  public function initialize()
  {
    $this->belongsTo('request_id', 'Request', 'id');
  }
}

$ this-> hasMany(' related外键 ',' main model name ',' main model外键 ');

只要设置正确,您就可以执行以下相关记录的创建:

class RequestsController extends \Phalcon\MVC\Controller
{
  public function createItemsAction($RequestId)
  {
    $Request = Request::findFirst($RequestId);
    $RequestItem = new RequestItem();
    $RequestItem->Request = $Request;
    $RequestItem->otherproperties = .....
  }
}

希望接近您的需求

使用以下代码添加保存的代码:

$user = new Users();
$success = $user->save($this->request->getPost(), array('name', 'email'));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM