【问题标题】:Update multiple columns with Doctrine in Symfony在 Symfony 中使用 Doctrine 更新多个列
【发布时间】:2011-01-26 10:23:10
【问题描述】:

我必须更新 Symfony 中的多个列,但我无法找到解决方案... 所以,我想这样做:

$q = Doctrine_Query::create()
     ->update('WebusersTable q')
     ->set('q.login_name','?','John')
     ->where('q.webuser_id=?',1)
     ->execute();

好的,这行得通,但我必须用几列来做。 我尝试了类似的方法,但它不起作用:

$q = Doctrine_Query::create()
     ->update('WebusersTable q')
     ->set('q.login_name,q.name','?','kaka,pisa')
     ->where('q.webuser_id=?',1)
     ->execute();

【问题讨论】:

    标签: symfony1 doctrine


    【解决方案1】:

    试试:

    $q = Doctrine_Query::create()
         ->update('WebusersTable q')
         ->set('q.login_name', 'John')
         ->set('q.name', 'Another value')
         ->where('q.webuser_id=?',1)
         ->execute();
    

    【讨论】:

    • 整洁 - 以前没见过。 +1 :)
    • jQuery 怎么知道 John 是一个字面量,而不是一个列名(我之所以这么问,是因为有像 ->set('amount','amount + 200') 这样的样本。而且我确实有问题沿着这些路线......
    • @Fronker 在第 1626 行 return $this->_addDqlQueryPart('set', $key . ' = ' . $value, true); 的 Doctrine_Query_Abstract 不在这里检查。它会在使用正则表达式和组件生成完整的原始 SQL 之前进行检查。你不会有任何问题。
    【解决方案2】:

    试试

    $q = Doctrine_Query::create()
    ->update('WebusersTable q')
    ->set(array('q.login_name' => 'John',
                'q.name' => 'Another value'))
    ->where('q.webuser_id=?',1)
    ->execute();
    

    【讨论】:

      【解决方案3】:
      class contentActions extends sfActions {
      
      const TABLE_NAME_ARTICLE = 'article';
      
      /**
       * Executes index action
       *
       * @param sfRequest $request A request object
       */
      public function executeIndex(sfWebRequest $request) {
      
      
          // Get id from $_GET
          $id = $request->hasParameter('id') ? $request->getParameter('id') : $request->getPostParameter(self::TABLE_NAME_ARTICLE . '[id]');
      
          // Create model active row by id
          $modelActiveRow = Doctrine::getTable(self::TABLE_NAME_ARTICLE)->find($id);
      
          // Verify existence article
          $this->forward404Unless($modelActiveRow);
      
          // Get form name
          $formName = self::TABLE_NAME_ARTICLE . 'Form';
      
          // Create article form object. Use model article (load data).
          $this->form = new $formName($modelActiveRow);
      
          if ($request->isMethod('post')) {
      
              $postData = $request->getParameter(self::TABLE_NAME_ARTICLE);
              $this->form->bind($postData);
      
              if ($this->form->isValid()) {
                  $this->form->save();
                  $this->getUser()->setFlash('notice', 'Changes were successfully saved.');
                  // redirect
              }
          }
      
      }
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多