1

FileUploadCakePHP (1.3) アプリでプラグイン (https://github.com/webtechnick/CakePHP-FileUpload-Plugin)を使用しようとしています。

と の 2 つのモデルがPendingContractありPendingContractFileます。APendingContractは多くのPendingContractFileレコードを持つことができます。新しい を保存するときPendingContractは、アップロードしたものも保存したいと思いPendingContractFileます。ただし、PendingContractまだ ID がなく、 my PendingContractFile.

明確にするために、ここに私のモデルがあります:

<?php
class PendingContract extends AppModel {

    var $name = 'PendingContract';
    var $belongsTo = array(
        'Supplier'
    );
    var $hasMany = array(
        'PendingContractFile'
    );
}

class PendingContractFile extends AppModel {

    var $name = 'PendingContractFile';
    var $belongsTo = array(
        'PendingContract' => array(
            'className' => 'PendingContract',
            'foreignKey' => 'pending_contract_id'
        ),
        'Author' => array(
            'className' => 'User',
            'foreignKey' => 'author_id'
        )
    );
}

そして、ここに私が保存しているコントローラーメソッドがありますPendingContract:

<?php
class PendingContractsController extends AppController {

    function add() {
        if (!empty($this->data)) {
            if ($this->FileUpload->success) {
                $this->Session->setFlash('Pending contract successfully created.');
                $this->redirect(array('action' => 'index'));
            }
            else {
                $this->Session->setFlash($this->FileUpload->showErrors());
            }
        }
    }
}

現在、私が得ているエラーは次のとおりです。

1452: 子行を追加または更新できません: 外部キー制約が失敗しました (pending_contract_files、CONSTRAINT pending_contract_files_ibfk_1 FOREIGN KEY (pending_contract_id) REFERENCES pending_contracts (id) ON DELETE CASCADE ON UPDATE CASCADE)

FileUploadプラグインを使用して、アップロードしたファイルを新しいPendingContractレコードに添付するにはどうすればよいですか?

4

3 に答える 3

0

同様の問題が発生しました。あなたのケースで新しいPendingContractFileを追加するときに、検証の設定を解除しました。したがって、saveAllメソッドの前に、次を追加してみてください。

unset($this->PendingContract->PendingContractFile->validate['pending_contract_id']);

したがって、foreign_keyはチェックされません。それが役に立てば幸い。

于 2013-03-08T15:39:07.027 に答える
0

プラグインを調べたところ、アップロードされたファイルとともに投稿されたデータを保存するようには見えません。アップロード ファイル データをフォームの他の入力から意図的に分離し、各ファイルの保存を実行します。

個人的には、コントローラーレベルのコードに依存しないhttps://github.com/josegonzalez/uploadなどの他のプラグインを試してみます。

于 2012-04-27T00:52:07.727 に答える
0
public function beforeSave($options = array()) {
    if (!isset($this->data[$this->alias][$this->primaryKey])) {
        $this->data[$this->alias][$this->primaryKey] = String::uuid();
    }
    return parent::beforeSave($options);
}

これにより、保存前にレコードの新しい UUID が生成されます。キーがまだ設定されていない場合にのみ、これを行う必要があります。

于 2012-04-27T00:47:40.717 に答える