Posted on

CakePHPのHasAndBelongsToManyを使う時の注意

以前下記の記事を書かせていただいたのですが、保存の所で想定の動きをしてくれない場合があるので注意が必要です。

————————————————————–
↓↓↓↓↓↓↓↓↓ここから前回の記事↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
————————————————————–

多対多のデータを扱うのにHasAndBelongsToManyをモデルで指定してあげると
簡単にデータの取り出しや保存が出来ました。

今回は社員が複数の部署に属すという仕様で使いました。
テーブルは次のようにしました。
parts(部署テーブル)、
users(社員テーブル)、
parts_users(部署・社員連携テーブル)
部署・社員連携テーブルは繋げたいテーブルを「_」で連結させてテーブル名とします。
parts_usersのフィールドは「part_id、user_id」となります。

次にPartsUserモデルを作っていないとエラーになるので作っておきます。

class PartsUser extends AppModel
{
var $name = 'PartsUser';
var $useTable = 'parts_users';
}

Userモデルで

class User extends AppModel
{
var $name = 'User';
var $useTable = 'users';
var $hasAndBelongsToMany = array('Part');
}

と記述してあげるとUserモデルでセレクトして得られた配列に
所属している部署全てが取得できています。

データの取得はこれですんなりと上手くいったのですがデータの保存が
あまり資料が無くはまりました。
データをセレクトで取得した形式でsaveしてあげても上手く保存が出来ません。
ではどういう配列構造で保存してあげればいいのか、

$this->data['Part']['Part'][0] = 部署番号
$this->data['Part']['Part'][1] = 部署番号
$this->data['Part']['Part'][2] = 部署番号
・
・
・

という感じにデータを持たしてあげるとparts_usersテーブルに社員と部署を
連携したデータを保存してくれます。

————————————————————–
↑↑↑↑↑↑↑↑↑↑↑ここまで前回の記事↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
————————————————————–

上記の方法で保存した時に実際の保存のSQLは下記のようになります。

UPDATE users SET name = '○○' WHERE users.id = 3;
SELECT PartsUser.user_id FROM parts_users AS PartsUser WHERE PartsUser.user_id = 3;
DELETE PartsUser FROM parts_users AS PartsUser WHERE PartsUser.user_id = (3);
INSERT INTO parts_users (user_id,part_id) VALUES (3,17), (3,2);

これがCakePHPのバージョンが変わったところ、下記のようなSQLになってしまいます。

UPDATE users SET name = '○○' WHERE users.id = 3;
SELECT PartsUser.part_id FROM parts_users AS PartsUser WHERE PartsUser.user_id = 3;
DELETE PartsUser FROM parts_users AS PartsUser WHERE PartsUser.part_id = (17, 2);
INSERT INTO parts_users (user_id,part_id) VALUES (3,17), (3,2);

このSQLだときちんと登録できないので、登録箇所はunbindModelをしてSQLを自分で作成することにしました。

Posted on

HighChartsでhighcarts.comへのリンクを消す方法

ブラウザ上でグラフを描画するライブラリはたくさんあるのですが、最近、多くの商用サイトで使われているのがこれだと思います↓

HighCharts JS

こんな感じのグラフを作ることが出来ます↓
HighCharts Demo

見栄えやグラフの描画され方が洗練されていて、プロ仕様のチャートライブラリです。
商用目的の使用は有料なのですが、非商用目的なら無料ですので、実験的に使ってみられても面白いかと思います。JQueryベースの無料のチャートライブラリでも結構すごいのがあるのですが、やはり仕事で使うとなると有料でもHighChartを使う場面が増えてきています。

さて、このHighChart、デフォルトの状態ではこの折れ線グラフのようにチャートの右隅にhighcharts.comというロゴが表示され、クリックするとHighChartsのサイトへとジャンプしてしまいます。

このリンクの表示を消すには、チャートの初期化時に以下のように書けば大丈夫です。

続きを読む HighChartsでhighcarts.comへのリンクを消す方法

Posted on

Linuxからwindowsサーバーにファイルを渡す

あるプロジェクトで(PHPを動かして)Linuxで生成したCSVファイルをwindowsサーバーに渡さないといけない状況が発生しました。

まずLinuxからwindowsサーバーにファイルを渡せるの?という疑問から解決していきます。
googleで調べるとsmbclientというのを使うとwindowsの共有フォルダにアクセス出来るみたい!!

smbclientを使うにはLinuxとwindowsの両方に設定が必要みたいです。

続きを読む Linuxからwindowsサーバーにファイルを渡す

Posted on

Twitter Bootstrap上でJQuery UI Datepickerを使用する際の問題

Twitter Bootstrapは単純なデザイン性から一歩進んだコンポーネントまで提供してくれる、WEBアプリケーション開発者にとって心強いフロントエンドフレームワークです。

Twitter Bootstrap
http://getbootstrap.com/

個人的にはTwitter Bootstrap + JQueryを使用すればかなり柔軟なUIを構築できると感じていますが、ひとつ大きな問題があります。
それは、

JQuery UIとの共存が難しい

ということです。
Bootstrapはcssだけでなくコンポーネント等の機能はJQueryで作成された基本ライブラリの読み込みが必須ですので、Bootstrapを使用する場合はTabやDialogといった機能はできるだけ最初からBootstrap標準のものを使用するのが良いと思われます。

ただ、datepickerに関してはJQuery UIのものが高機能で実績もあるのでできたらそっちを使いたい、というのが本音です。

JQuery UI datepickerをBootstrap上で使用する際にもっとも問題になるのは、

続きを読む Twitter Bootstrap上でJQuery UI Datepickerを使用する際の問題

Posted on

簡単なJQueryのプラグインを作ってみた

ブラウザ上で動作するアプリケーションを開発されている方のほとんどは、JQueryライブラリを利用しているのではないでしょうか。最近ではUIの機能も成熟してきてますし、モバイル用にも拡張され、非常に使い勝手の良いライブラリです。

JQuery公式サイト(英語)
http://jquery.com/

JQuery UI公式サイト(英語)
http://jqueryui.com/

JQuery Mobile公式サイト(英語)

http://jquerymobile.com/

そして何より魅力なのはそれらの基礎ライブラリを元にユーザが拡張したプラグインが豊富に提供されていることです。
以前は入力補助の小さなものが主でしたが、今では複雑なチャートや書き込み可能なカレンダーといった大規模なプラグインがほとんどの場合無料で提供されています。

最初は他の人が作ったプラグインを使うばかりだった人も、慣れてくるにしたがって自分の作った機能をプラグイン化してみたい、という欲求に駆られてくると思います。
だって、うまく機能単位で切り出せれば他の所でも使えますし、人にも提供しやすくなりますもの。

JQueryのプラグインの初歩の初歩はこちらで勉強させていただきました。

jQueryプラグインの作り方 ~ 重要な3つのポイント ~

http://nigohiroki.hatenablog.com/entry/2013/02/13/002508

ふむふむ、なるほど、

続きを読む 簡単なJQueryのプラグインを作ってみた

Posted on

jQuery ガントチャート

ガントチャートが必要なシステムを開発するかもしれないので調査しました。
あまり需要がないのか難しいのかAjaxで編集まで出来る物はありませんでしたが、メモも兼ねて書いておきます。

Teamwork Gantt
かなり多機能。解析、改修が大変そうです。

jquery.ganttView
比較的シンプル。タスクの依存関係がないらしい。
タスクの依存関係等のカスタマイズ記事

dhtmlxGantt
シンプルで良い感じ。ライセンスがGPL

編集可能なガントチャートはこれぐらいしかありませんでした。

Posted on

Googleカレンダーみたいに開始時刻からの経過時間を日本語で出したい

 システムでイベントの開始時刻と終了時刻を入力する欄が必要な時、開始時刻がインプットされていれば終了時刻を選択する際には開始時刻からの経過時間が表示されていると、ユーザさんにとって分かりやすいですよね(^^)

たとえばこんな感じです↓

続きを読む Googleカレンダーみたいに開始時刻からの経過時間を日本語で出したい