2012 5月 ITかあさん

ITかあさん

ちょっと意外?Cakephpは同一のテーブルでbindできる

Cakephpは同一のテーブルでbindできる

まさか~と思って試したところ、出来てしまいました。
一つのテーブルに、親子関係があるようなデータ構造があったとします。
例えば都道府県と市区町村を一つのテーブルで管理するareaテーブルがあったとします。

areaテーブルの例

下記の場合だと、都道府県が親、市区町村が子の関係になり、都道府県は親を持たないデータ、市区町村はそれぞれの都道府県を親に持つデータ構造になります。
この場合、子を複数持つ、hasManyの形で『たった一つのテーブルでbind』したいのです。

areaテーブルのデータの例

id name parent_id
1 東京 0
2 埼玉 0
3 千葉 0
4 神奈川 0
5 栃木 0
6 新宿 1
7 さいたま市 2
8 浦安 3
9 横浜 4
10 宇都宮 5

Cakephp hasManyでbind

親(都道府県)が、子(市区町村)をたくさん持つのですから、この場合hasManyですね。

$this->Area->bindModel(
array(
hasMany‘=>array(
Area‘=>array(
‘className’=>’Area‘,
‘conditions’=>”,
‘order’=>”,
‘foreignKey’=>’parent_id’,
)
)
),false);

hasMany bindの実行結果

実行結果は以下のようになり、単一のテーブルでも何ら問題ないhasManyで結果が返ってきます。

Array
(
    [0] => Array
        (
            [Area] => Array
                (
                    [id] => 1
                    [name] => 東京
                    [parent_id] => 0
                    [0] => Array
                        (
                            [id] => 6
                            [name] => 新宿
                            [parent_id] => 1
                        )

                )

        )
    [1] => Array
        (
            [Area] => Array
                (
                    [id] => 2
                    [name] => 埼玉
                    [parent_id] => 0
                    [0] => Array
                        (
                            [id] => 7
                            [name] => さいたま市
                            [parent_id] => 2
                        )

                )

        )
)

単一のテーブルでhasManyのSQL

bindは単一のテーブルでも可能なことは分かりました。
最後にどのようなSQLが発行されていたか確認しました。

SELECT `Area`.`id`, `Area`.`name`, `Area`.`parent_id` FROM `areas` AS `Area` WHERE `Area`.`parent_id` IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

なるほど、INですか。

AndroidSDKアップデートエラーとその対策

AndroidSDKアップデートエラーとその対策

Android SDKがあればAndroidの端末が無くても、気軽にAndroidが体験できますね。
Androidのアプリ開発にとインストールしたものですが、普通にスマートフォン制作をするにあたっても、
Androidのバージョン別にブラウザの確認が出来ます。

Androidも2.1と2.2ではCSS3の使えるプロパティが大幅に変わっているので、Android版の『IE Tester』として、WEBデザイナーの方も気軽に使っていただきたいです。

AndroidSDKインストール手順

AndroidSDKのインストール手順はこちらを参考にして下さい。初心者向けで分かりやすいです。
(先にJAVAをインストールしておく必要があります。)

で、今回はAndroid SDKのアップデートエラーに関する解決方法を紹介します。

AndroidSDKアップデートエラーA folder failed to be moved・・・

AndroidSDKアップデートをアップデートしようとすると、何やらエラーが発動し、うまくアップデートが出来ません。
まずは以下画像を順番にご覧下さい。

SDKmanager.exeをクリックします。

新しく入れたいAndroidのバージョンをチェック

インストールボタンをクリック

エラーが出てしまいます。

エラーの内容は読んだとおりなのですが、アンチウィルスソフト、toolフォルダを開いていないか、閉じたら再度実行して下さい、という内容です。
実際問題toolディレクトリから実行を行っているわけなので、別のところからアップデートの実行を行う必要があります。

toolsディレクトリを複製して、複製先のbatファイルからアップデート実行

toolsディレクトリを複製する

toolsディレクトリを複製します。難しいことは考えず、ただ複製します。


後は先ほどと全く同じでアップデートを実行しましょう。

ここまでくればアップデートは大丈夫ですね。

ちょっと一癖ありましたが、Android4が出てしばらく。気軽に使ってWEB制作の効率も上げていきたいものです。