ComposerでPackagistに登録されていないプラグインをインストールする方法

みなさんこんにちは!

最近はRailsとSwiftで四苦八苦してるたがみです!
久しぶりにCakePHPを触る機会があり、忘れちゃいけないのでブログに残しとこう!と思った次第です。

今回の例は、
あるプロジェクトでcomposerを使ってプラグイン等を管理しているが、過去のプラグインでPackagistに登録されていない。どうやれば解決出来るんだっけ?
です!

それではいってみましょう!

“ComposerでPackagistに登録されていないプラグインをインストールする方法” の続きを読む

CakePHPのfind()でjoinオプション使う場合はfieldsもちゃんと指定しよう

タイトルとおりのことです。

うまくjoin出来てるはずなのにな〜〜なんでだろうなぁ、sql_dumpでちゃんと思い通りのSQL発行されてるのにな〜なんだろうなぁ・・・と思い、色々optionを指定していたらタイトルとおりのことが出来ていなかったせいで結果が反映されていませんでした。

下記のようなコードを書いた場合はちゃんとfieldsも指定しましょう

$this->User->find('all', [
    'joins' => [
        'comment' => [
            'table' => 'comment',
            'alias' => 'Comment',
            'type' => 'inner',
            'conditions' => [
                'User.id = Comment.user_id'
            ]
        ]
    ],
    'fields' => '*'
]);

これで解決。めでたしめでたし!

参考:http://stackoverflow.com/questions/4354846/cakephp-display-custom-fields-from-array/4355357#4355357

cakePHP2.0のfindでINNER JOINしてもJOINしたテーブルが表示されない

詳解CakePHP辞典―2.0/2.1/2.2/2.3対応
滝下 真玄
秀和システム
売り上げランキング: 91,713

知っていると便利なCakePHP2のコアライブラリ 〜String編〜

CakePHP2を使い始めて約2年が経ちましたが最近やっとコアライブラリまで目がいくようになりました(遅い)
CakePHPにはコアライブラリとしてたくさんの便利な関数がつまっています。
これらを知っているだけでも開発が相当便利になるなぁと最近感じているのでその中から今回は「String」ライブラリの中から便利だなぁと思う関数を紹介したいと思います。

“知っていると便利なCakePHP2のコアライブラリ 〜String編〜” の続きを読む

CakePHP2のアップロードプラグイン「Upload」で画像を上げ直す処理を書いてみた

こんにちは!

今日はCakePHP2のプラグインである「Upload」プラグインで画像をあげなおす処理を書いてみます。
結果的に無理矢理感が出てしまってますが、とりあえず実装は出来るってことでw
綺麗に書きたい〜〜

“CakePHP2のアップロードプラグイン「Upload」で画像を上げ直す処理を書いてみた” の続きを読む

CakePHP2で1段階以上先のリレーション先にもデータを保存する

Q. CakePHP2でリレーション先までデータを保存したい

A. saveAllメソッドにdeepオプションを渡してあげましょう。


・ArticleがItemを複数持ち、ItemはMetaItemを複数持っている(Naverまとめ的な)

Article.php

 array(
            'className' => 'Item',
            'foreignKey' => 'article_id',
            'dependent' => true
            )
    );
}

Item.php

 array(
            'className' => 'MetaItem',
            'foreignKey' => 'item_id',
            'dependent' => true
        )
    );
}

MetaItem.php

 array(
            'className' => 'Item',
            'foreignKey' => 'item_id'
        )
    );
}

保存するデータの構造

array(
    'Article' => array(
        ...
    ),
    'Item' => array(
        (int)0 => array(
            ...
        ),
        (int)1 => array(
            ...
            'MetaItem' => array(
                (int)0 => array(
                    ...
                ),
                (int)1 => array(
                    ...
                )
            )
        )
    )
)

使うメソッド

$this->Article->saveAll($data, array('deep' => true));

・コメント
なぜかリレーションが1段階先しか保存してくれない!!って困ったのでぐぐってみるとdeepオプションというのがあるじゃないですか!
ということで早速使ってみると見事解決。よかったよかった〜〜
適切なデータ構造を作って渡してあげれば適当に処理してくれるCakePHPありがとうございます!!

詳解CakePHP辞典―2.0/2.1/2.2/2.3対応
滝下 真玄
秀和システム
売り上げランキング: 112,599

CakePHP2でhasManyのデータをFormHelperでViewに表示させる

こんにちは!

ModelのhasManyを使って、データをfindしてきたとき、FormHelperでViewにどう表示させるもんか悩んだのでメモ変わりに書いておきます。
多分なんのこっちゃ言ってるかわからないと思うのですが、以下のようなデータがあった場合にFormHelperのデフォルト値に反映させて、まぁいわば編集のような機能をつけたいときに悩んだのです(ようわからん)

array(
    'Article' => array(
        'id' => '1',
        ....
    ),
    'Item' => array(
        (int)0 => array(
            'id' => 1,
            'order' => 1,
            ....
        ),
        (int)1 => array(
            ....
        )
    )
)

こんなデータがあったとします。このデータをControllerからViewに渡していると仮定しときます($this->dataにぶちこむ)
これをFormHelperでぱぱっと表示出来る方法はないかと色々探していたら以下のようなものを見つけました。

How to edit form with hasMany (multiple rows)

ようは以下のような感じです。

data['Item'] as $item){
    echo $this->Form->hidden('Item.' . $count . '.id');
    echo $this->Form->hidden('Item.' . $count . '.order');
    // 必要に応じて増やす
    $count++;
}

// Output
// 
// 
// ...
// 

このようにコードを書けばあるArticleに紐づくhasManyなものをまとめて編集したい!のような要望にも答えられるかと思います。
ただ$countがちょっとださいなぁと。
あともう1階層深いリレーションを表示させようとするとイテレートをもう1段階増やさなければならないのでカウンターも増えてしまうのが嫌だなぁと。

もっとうまい方法があるはずなんですが、もし誰かこうやったほうがよくない?みたいなのがあれば教えてください!!

Webアプリ開発を加速する CakePHP2定番レシピ119
長谷川 智希
秀和システム
売り上げランキング: 17,934