web-dev-qa-db-ja.com

モデルでカスタム入力データを設定する方法

アプリケーションでCRUDにJTableを使用しています。データベースにデータを保存するメソッドをモデルに作成しました

「$ custom_data」変数に示されているように、「created」と「created_by」のカスタム入力を追加して、データベースに保存する必要があります。 $ form_dataが正常に保存されていることに注意してください。

public function create() {
        $table = $this->getTable();
        $jinput = JFactory::getApplication()->input->post;
        $form_data = $jinput->get('jform', array(), 'array');
        $custom_data = array(
            'created'       => JFactory::getDate()->toSql(),
            'created_by'    => JFactory::getUser()->id
        );

        if (!$table->save($form_data)) {
            JError::raiseNotice(500, $table->getError());
            return FALSE;
        }

        return $form_data;
    }
1
Sahil Purav

あなたは別の方法を求めました、ここにそれは:-)です

そのような操作のIMHOに最適な場所は、JTableクラスのbindメソッドです。以下は、JTableクラスでこのメソッドをオーバーライドする方法の例です。

public function bind($src, $ignore = array())
{
    // Call parent's bind method
    if (parent::bind($src, $ignore))
    {
        // Do the following only when it's a new item ($this->id is 0 then)
        if (!$this->id)
        {
            $this->created = JFactory::getDate()->toSql();
            $this->created_by = JFactory::getUser()->id;
        }
    }
    return true;
}

これで、これらの行は不要になります。

$custom_data = array(
    'created' => JFactory::getDate()->toSql(),
    'created_by' => JFactory::getUser()->id
);
$data += $custom_data;

モデルで$ table-> save()を呼び出しており、このメソッドはbind()メソッドを自動的に呼び出します。

2
fruppel

私はこの問題を次のように解決することができました:

$ data = $ form_data + $ custom_data;を追加しました。他の推奨される方法はかなりあります。

public function create() {
        $table = $this->getTable();
        $jinput = JFactory::getApplication()->input->post;
        $data = $jinput->get('jform', array(), 'array');
        $custom_data = array(
            'created' => JFactory::getDate()->toSql(),
            'created_by' => JFactory::getUser()->id
        );
        $data += $custom_data;
        try {
            $table->save($data);
        } catch (Exception $ex) {
            if ($ex->getCode() == '404') {
                throw new Exception($e->getMessage(), 404);
            } else {
                JFactory::getApplication()->enqueueMessage(JText::_('COM_HELPDESK_ERROR_OCCURRED'), 'error');
            }
        }

        $id = array(
            'id' => $table->id
        );

        $data += $id;

        return $data;
    }
1
Sahil Purav