【问题标题】:Phalcon framework - add related modelsPhalcon框架——添加相关模型
【发布时间】:2013-08-20 15:36:19
【问题描述】:

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

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

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

这个问题已经有一年多了。没有必要或没有帮助的新答案

【问题讨论】:

    标签: php orm phalcon


    【解决方案1】:

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

    $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';
    }
    

    【讨论】:

      【解决方案2】:

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

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

      然后你将能够使用 $request->getItems(); 获取所有项目;

      【讨论】:

        【解决方案3】:

        请告诉我你的数据库表结构完整的。

        你最常用的方法在这个页面: http://docs.phalconphp.com/pt/latest/reference/models.html#defining-relationships

        【讨论】:

          【解决方案4】:
          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('相关外键', '主模型名称', '主模型外键' );

          只要设置正确,您就可以像这样创建相关记录:

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

          希望接近你所需要的

          【讨论】:

            【解决方案5】:

            使用以下代码添加保存:

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

            【讨论】:

              猜你喜欢
              • 2014-02-01
              • 1970-01-01
              • 2018-07-21
              • 2013-08-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多