CakePHP:save()メソッドを使用し、データの登録・更新

CakePHPでデータの登録、更新をする場合にsave()メソッドを使用してデータを保存します。
save()メソッドは使い方によって「insert」または「update」のSQLを実行します。
今回はCakePHPのsave()メソッドを使用しデータを保存した時のメモを記載します。


CakePHP save()メソッド

データを保存する為のメソッドです。


「insert」登録する場合

save()メソッドを使用してデータを新規登録するには、登録するテーブルの主キーを設定せずに登録するデータを用意すれば「insert」できます。
※主キーが「id」の場合

新規にデータを登録するには、下記のように設定します。

	// 登録する内容を設定
	$data = array('Hoge' => array('name' => 'hoge', 'status' => 1));

	// 登録する項目(フィールド指定)
	$fields = array('name', 'status');

	// 新規登録
	$this->Hoge->save($data, false, $fields);

nameが’hoge’でstatusが1のデータを新規登録します。


「update」更新する場合

save()メソッドを使用してデータを更新するには、テーブルの主キーの値を設定してデータを用意すれば「update」できます。
※主キーが「id」の場合

idが1のデータを更新する場合、更新するデータでid(主キー)を設定します。
下記はidが1のデータのstatusを更新しています。

	// 更新する内容を設定
	$data = array('Hoge' => array('id' => 1, 'status' => 2));

	// 更新する項目(フィールド指定)
	$fields = array('status');

	// 更新
	$this->Hoge->save($data, false, $fields);

主キーを設定した場合は、データを更新することができます。


Linux:サーバ内のディレクトリの容量を調べる(du)

Linuxサーバ内でそれぞれのファイル・ディレクトリの容量を調べたい場合があります。
サーバの容量を削減したい場合などに、どのファイル・ディレクトリが容量が大きいかを調べることができれば便利です。
duコマンドを使用すれば、ディレクトリ容量を確認することができます。
今回はサーバ内のディレクトリの容量をサイズの大きい順でソートして表示・出力する方法を記載します。

duコマンド

指定したファイル・ディレクトリの容量を出力します。
ファイル・ディレクトリを指定しない場合はカレントディレクトリの容量を出力します。
ディレクトリを指定した場合は、サブディレクトリの容量も出力します。

du [オプション] [ファイル・ディレクトリ]

sortコマンド

テキストファイルの行を並び替えます。
指定したオプションでソートできます。

sort [オプション] [ファイル]

ディレクトリの容量を調べる

容量を調べたいディレクトリに移動します。
duコマンドを使用して、カレントディレクトリ以下のディレクトリの容量をサイズの大きい順でソートして表示します。
※容量の単位をMバイトで表示し、パイプを使用してソート順を変更。

# du -m | sort -rn
40      .
27      ./wp-content
16      ./wp-content/plugins
8       ./wp-includes
6       ./wp-content/uploads
6       ./wp-admin
(省略)

ファイルに出力する場合は下記のように指定します。
※hoge.txtに出力結果を書き込む。

# du -m | sort -rn > hoge.txt

hoge.txtファイルに出力結果が書き込まれます。

40      .
27      ./wp-content
16      ./wp-content/plugins
8       ./wp-includes
6       ./wp-content/uploads
6       ./wp-admin
(省略)

Codeigniter:クエリからCSVダウンロードした時のCSVデータを変更

CodeigniterでクエリからCSVダウンロードを行った際に、データベースユーティリティクラスの「csv_from_result」を使用してCSVデータを取得しました。
「csv_from_result」で取得したデータを参照すると行の末尾にカンマが入ってしまいます。また、最終行に改行が入ってしまいます。
「行の末尾のカンマ」や「最終行に改行」を入れたくなかったので、「csv_from_result」を変更してCSVデータを取得しました。
その時に行った処理をメモします。


csv_from_result

データベースユーティリティクラスの「csv_from_result」は下記のファイルに記載されています。

system/database/DB_utility.php

クエリの結果からCSVを生成します。

    /**
     * Generate CSV from a query result object
     *
     * @access    public
     * @param    object    The query result object
     * @param    string    The delimiter - comma by default
     * @param    string    The newline character - \n by default
     * @param    string    The enclosure - double quote by default
     * @return    string
     */
    function csv_from_result($query, $delim = ",", $newline = "\n", $enclosure = '"')
    {
        if ( ! is_object($query) OR ! method_exists($query, 'list_fields'))
        {
            show_error('You must submit a valid result object');
        }

        $out = '';

        // First generate the headings from the table column names
        foreach ($query->list_fields() as $name)
        {
            $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $name).$enclosure.$delim;
        }

        $out = rtrim($out);
        $out .= $newline;

        // Next blast through the result array and build out the rows
        foreach ($query->result_array() as $row)
        {
            foreach ($row as $item)
            {
                $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $item).$enclosure.$delim;
            }
            $out = rtrim($out);
            $out .= $newline;
        }

        return $out;
    }

■ 変更内容

新しくhelperを作成します。
今回は「csvdata_helper.php」というヘルパーを作成、「csv_from_result」のソースをコピーし、下記のように変更しました。
行の末尾のカンマと最終行の改行を削除するように変更してます。

・ヘルパー(csvdata_helper.php)

if ( ! function_exists('csv_from_result'))
{
    function csv_from_result($query, $delim = ",", $newline = "\n", $enclosure = '"')
    {
        if ( ! is_object($query) OR ! method_exists($query, 'list_fields'))
        {
            show_error('You must submit a valid result object');
        }

        $out = '';

        // First generate the headings from the table column names
        foreach ($query->list_fields() as $name)
        {
            $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $name).$enclosure.$delim;
        }

        $out = rtrim($out);
        // 行の末尾のカンマを削除
        $out = rtrim($out, $delim);
        $out .= $newline;

        // Next blast through the result array and build out the rows
        foreach ($query->result_array() as $row)
        {
            foreach ($row as $item)
            {
                $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $item).$enclosure.$delim;
            }
            $out = rtrim($out);
            // 行の末尾のカンマを削除
            $out = rtrim($out, $delim);
            $out .= $newline;
        }

        // 最終行に改行を削除
        $out = rtrim($out, $newline);
        return $out;
    }
}

コントローラー側でCSVデータを取得する際に新しく作成したヘルパーの「csv_from_result」を呼び出し、CSVデータを取得します。

・コントローラー

    // 作成したヘルパーを読み込む
    $this->load->helper(array('download', 'csvdata'));

    // クエリデータ取得
    $query = $this->db->query('SQL文');

    // ヘルパーに追加した関数を呼び出し、CSVデータ取得
    $data = csv_from_result($query);

    force_download('hoge.csv', $data);

上記方法で「行の末尾のカンマ」や「最終行に改行」が入らないようにCSVデータを出力することができます。


Firefox:FirefoxでJavaプラグインが動作しない

Firefoxで突然Javaが動かない現象が起きたので、その時の対処方法を記載します。
ちなみに、IEでは動作しましたが、ChromeではFirefoxと同じようにJavaが動かない状態で、Javaはインストールされているのですが、見つからないと言われてしまいました。
今回は下記の方法を行った際に、FirefoxとChromeでJavaプラグインが動作するようになったのでメモします。


Firefoxプラグイン確認

Firefoxでプラグインの確認をするにはアドレスバーに「about:plugins」を入力しアクセスします。
アクセスすると現在使用しているプラグインの一覧が表示されます。


Javaの動作確認

Javaが正常に動作するかの確認は下記にアクセスし、Javaが動作確認をすることができます。
http://java.com/ja/download/testjava.jsp


FirefoxでJavaが動作しない対処方法

コントロールパネルを表示し、プログラムのアンインストールをクリックします。

firefox_java_1

プログラムのアンインストールまたは変更画面を表示すると、「JavaFX 2.1.1」がインストールされてあります。

firefox_java_2

「JavaFX 2.1.1」を選択し、アンインストールをクリックします。
ダイアログボックスが表示されるので「はい」をクリックし、「JavaFX 2.1.1」をアンインストールします。

firefox_java_3

アンインストール後、FirefoxでJavaの動作確認のページにアクセスします。
下記のようにJavaが正常に動作することがわかります。
※Chromeでも同じように動くようになります。

firefox_java_4


CakePHP:CakePHPで$_GETの値を取得

CakePHPで$_GETの値を取得する方法を記載します。
CakePHPでは$this->params[‘url’]に格納され、$_POSTの値は$this->params[‘form’]に格納されます。
CakePHPではGETやPOSTの値はparams配列に格納されます。


■ $_GETの値を取得する

下記のURLでアクセスした場合

http://raining.bear-life.com/?id=20&name=hoge

「id」の値を取得

$this->params['url']['id'];

「20」が取得できます。


「name」の値を取得

$this->params['url']['name'];

「hoge」が取得できます。

※$this->params[‘url’]では$_POSTの値が取得できないので注意です。