0

4枚の写真がある記事を保存しようとすると問題が発生します。事は私がのような写真に名前を付けるために記事IDを使用する必要があるということですarticle_id."-"$i

私は記事ごとに4枚の写真しかないので、この$iは1から4または0から3でなければなりません。

問題は、これを実現するために、使用するIDを持つことができるように、Articleモデルを作成して保存する必要があることですが、すべてのスクリプトを実行して親指を作成し、名前を形成した後、Article->saveAssociatedに移動します()記事レコードを2回作成しました!! 保存する前にIDを「-1」に設定しようとしましたが、何もしませんでした...

どんな提案でも大歓迎です!!!

コード:

public function add() {

    if ($this->request->is ( 'ajax' )) {
        $this->layout = 'ajax';
    } else {
        $this->layout = 'default';
    }



    if ($this->request->is ( 'post' )) {

        $this->Article->create ();

        $this->request->data ['Article'] ['time_stamp'] = date ( 'Y-m-d H:i:s', time () );  




        if ($this->Article->save($this->request->data) ) { 


        for ($i=0; $i<4; $i++){



            $img_path = "./images/";
            $extension[$i] = end(explode('.', $this->request->data['Image'][$i]['image']['name']));

            $this->request->data['Image'][$i]['image'] = array('name'=>$this->Article->id."-".$i,  'tmp_name' => $this->request->data['Image'][$i]['image']['tmp_name']);
        //  $this->request->data['Image'][$i]['name'] = $this->Article->id."-".$i;


            $this->request->data['Image'][$i]['ext']= $extension[$i];

            $target_path[$i] = $img_path . basename($this->request->data['Image'][$i]['image']['name'].".".$extension[$i]);


            if(!move_uploaded_file($this->request->data['Image'][$i]['image']['tmp_name'], $target_path[$i])) {

                die(__ ( 'Fatal error, we are all going to die.' ));

            }else{

                $this->Resize->img($target_path[$i]);
                $this->Resize->setNewImage($img_path.basename($this->request->data['Image'][$i]['image']['name']."t.".$extension[$i]));
                $this->Resize->setProportionalFlag('H');
                $this->Resize->setProportional(1);
                $this->Resize->setNewSize(90, 90);
                $this->Resize->make();

            }
            }


            $this->Article->id;
            pr($this->Article->id);
            $this->Article->saveAssociated($this->request->data, array('deep' => true));
            //$this->redirect ( array ('action' => 'view', $this->Article->id ) );
            pr($this->Article->id);
            exit;   
            $this->Session->setFlash ( __ ( 'Article "' . $this->request->data ["Article"] ["name"] . '" has been saved' ) );


        } else {
            $this->Session->setFlash ( __ ( 'The article could not be saved. Please, try again.' ) );
        }

}



    $items = $this->Article->Item->find ( 'list' );
    $payments = $this->Article->Payment->find ( 'list' );
    $shippings = $this->Article->Shipping->find ( 'list' );

    $this->set ( compact ( 'items', 'payments', 'shippings' ) );
}
4

1 に答える 1

1

それ以外の

$this->Article->saveAssociated();

記事をもう一度保存します。次のようなものを使用して画像を個別に保存します。

foreach($this->request->data['Image'] as &$image) {
    $image['name'] = 'whatever_you_want' . $this->Article->id;
    $image['article_id'] = $this->Article->id;
}
$this->Article->Image->save($this->request->data['Image']);

別のオプション(必ずしも良いとは限りません-単に別のオプション)は、新しく作成された記事idを既存のArticle配列に追加することsaveAssociated()です。記事idのデータにが含まれている場合、作成ではなく更新されます。上記の最初の答えを提案しますが、これが誰かのシナリオに役立つ場合に備えて、他のオプションをブレインストーミングするだけです。

// 1) save the Article and get it's id
// 2) append the `id` into the Article array
// 3) do your image-name manipulation using the id
// 4) saveAssociated(), which updates the Article and creates the Images
于 2012-10-21T21:13:43.463 に答える