[FuelPHP] ORMモデルによるリレーション

Posted 2013年5月1日 | Auther dada | Category PC・デジタル | Tag タグ:
Twitterにツイートする Facebookでシェアする はてなブックマーク

FuelPHPを使ったリレーションがやっとわかったのでメモしておきます。
要件は下記の通り。

テーブル「カード」と、
テーブル「ユーザーが所持するカード一覧」の2種類を用意し、
特定のユーザーが持っているカードだけ抽出する

テーブルの作成

まずは「カード」のテーブルを作成します。
カードID、カード名だけの単純なテーブルです。

CREATE TABLE `testdb`.`table_card` (
`cardid` VARCHAR( 32 ) NOT NULL UNIQUE,
`name` VARCHAR( 256 ),
INDEX ( `cardid` )
) ENGINE = MYISAM ;

次にユーザーが所有するカードの一覧のテーブルです。
こちらもシリアル、ユーザーID、カードID、枚数だけの単純なもの。

CREATE TABLE `testdb`.`table_userscard` (
`id` SERIAL NOT NULL DEFAULT NULL UNIQUE,
`userid` VARCHAR( 256 ),
`cardid` VARCHAR( 32 ),
`count` INT,
INDEX ( `id` )
) ENGINE = MYISAM ;

ORMモデルの準備

単純な \Fuel\Core\Model_Crud ではなく、\Orm\Model を使います。

ORM(オブジェクトリレーショナルマッパー)はざっくり言うと“リレーションを組むのに便利なモデル”です。
ORMを使うには事前に準備が必要になります。

Introduction - Relations - Orm Package - FuelPHP Documentation
FuelPHPのORM(オブジェクトリレーショナルマッパー) | WinRoad徒然草
FuelPHPをやってみる (8) - Orm\Modelを試す - - kinjou_jのメモログ

モデルの作成

いよいよORMを継承したクラスを作ります。

まずはユーザーの所有カード。
バリデーションの設定など色々行えますが、ここではシンプルに。

fuel/app/classes/model/userscard.php

class Model_Userscard extends \Orm\Model{
  protected static $_table_name = 'table_userscard';
  protected static $_primary_key = array('id');
  protected static $_propeties = array(
    'id',
    'userid',
    'cardid',
    'count'
  );
}

そしてリレーションを設定するカードのモデル。

fuel/app/classes/model/card.php

class Model_Card extends \Orm\Model{
  protected static $_table_name = 'table_card';
  protected static $_primary_key = array('cardid');
  protected static $_propeties = array(
    'cardid',
    'name'
  );

  /**********************************
   * リレーション:一対多
   */
  protected static $_has_many = array(
    'owncard' => array(
      'model_to' => 'Model_Userscard',
      'key_from' => 'cardid',
      'key_to' => 'cardid',
      'cascade_save' => false,
      'cascade_delete' => false
    )
  );
}

key_from、key_toで結合する項目を指定しています。
また、cascade_save、cascade_deleteは「false」にして、カード情報を変更や削除しても、所有情報には影響が出ないようにしています。

コントローラーからの呼び出し

そしていよいよ本番! リレーションを使い、かつ、リレーション内での絞り込みです。

$results = Model_Card::find( 'all', array(
  'related' => array(
    'owncard' => array(   // リレーション条件を指定
      'where'=> array(    // リレーション内での検索
        array( 'userid', '=', 'ABC12345' )
      )
    )
  ),
// table_card 側での検索はこっちに記述
//  'where' => array(
//    array( 'exp' => 3 )
//  ),
  'order_by' => array( 'cardid'=> 'asc' )
));

モデル内で作成したリレーション条件名を「related」で指定し、
その中で同じように「where」を指定するだけなのですが、
これがなぜか情報が見付かりませんでした。^^;

同じ状況で悩んでいる方のお役に立てればと。

ORMモデルの注意点

\Orm\Model を継承した場合と、\Fuel\Core\Model_Crud を継承した場合ではメソッド名も違いますし、取得できるデータ形式もだいぶ違いますので注意が必要です。

一度 var_dump() で確認してみてください。

[FuelPHP]スマホとPCでテンプレートとテーマを切り替える

Posted 2013年4月15日 | Auther dada | Category PC・デジタル | Tag タグ:
Twitterにツイートする Facebookでシェアする はてなブックマーク

FuelPHPで端末によって表示を切り替える方法はいくつかあるようですが、
一番簡単なのは Themeクラスを使うことです。

今回の要件は下記の通り。

  • コンテンツ部分を携帯端末とPC・iPadで切り替えたい。
  • 共通のベース部分のテンプレートも切り替えたい。
  • テンプレートは fuel/app/views/template_pc.phptemplate_mobile.php を切り替えて使う。
  • コンテンツ部分は fuel/app/views/pc/fuel/app/views/mobile/ を切り替えて使う。
fuel
  + app
    + classes
    | + controller
    |   + list.php ←コントローラー
    |
    + view
      + template_pc.php ←PC用テンプレート
      + template_mobile.php ←携帯用テンプレート
      + pc  ←PC用テーマディレクトリ
      | + list
      |   + index.php
      |
      + mobile ←携帯用テーマディレクトリ
        + list
          + index.php

コントローラー

まずは初期化部分。

fuel/app/classes/controller/list.php

class Controller_List extends Controller{

  function before(){

    parent::before();

    // テーマ設定
    $this->theme = Theme::instance(
      'custom',
      array(
        'active' => "pc",  // 存在するテーマディレクトリを指定
        'fallback' => 'pc',  // activeが存在しない場合に使うテーマ
        'paths' => array(APPPATH.'views'), // 検索パス
        'view_ext' => '.php' // テーマファイル拡張子
      )
    );

    // モバイル端末ならテンプレート変更
    // iPadは除外
    if (Agent::browser() != "iPad" && Agent::is_mobiledevice()){
      $this->theme->active('mobile');
      $this->theme->set_template('template_mobile');
    }else{
      $this->theme->active('pc');
      $this->theme->set_template('template_pc');
    }
  }

いったんインスタンスを作る時に active を指定しないとエラーになるので、
PC向けのテーマ(active)を指定して、後から変更しています。

FuelPHPの Agentクラスでは iPadもモバイル端末扱いなのですが、
iPadは PCと同じほうがいいですよねw

続いて表示部分。

fuel/app/classes/controller/list.php

  public function action_index()
  {
    $this->theme->template->title = "ページタイトル";
    $this->theme->template->content = $this->theme->view('list/index', Array(
      'hoehoe' => 'ほえほえ'
    ));
    return $this->theme;
  }

タイトルと、テーマ内で使う変数を指定しています。
最後にテーマを返すことで表示させます。

テンプレートファイル

fuel/app/views/template_pc.php

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title><?php echo $title; ?></title>
</head>
<body>
  <?php echo $content; ?>
  <p>PC用</p>
</body>
</html>

テーマファイル

fuel/app/views/pc/list/index.php

リスト表示するテーマ
<?php echo $hoehoe; ?>

このへんを参考にしました。

FuelPHPのテーマクラスのサンプル - BTT's blog
FuelPHPのテーマクラス | WinRoad徒然草

その他の方法

この記事のサンプルでは Controllerクラスを継承した方法を使っていますが、Controllerクラスを拡張した Controller_Templateを使う方法もあります。
テンプレートコントローラーでは変数「$template」でテンプレートを指定することが出来ます。

class Controller_Entry extends Controller_Template{
  public $template = 'template_pc';

画面の反映はテーマを使ったのと同じ様なものです。

サンプルでは Controllerクラスを継承していたので return で表示内容を返す必要がありましたが、Controller_Templateクラスを継承している場合その必要はありません。
$this->template 内のものが自動的に表示されます。

  $this->template->content = $this->Theme->view( 'list/index', array('hoehoe'=>'ほえほえ') );

テーマの設定を使って切り替える方法もあるようです。

FuelPHPのテーマクラスの概要(実践編その9) | WinRoad徒然草

[PHP]Windows7 + AMPPS + Xdebugでデバッグ環境を作る

Posted 2013年4月14日 | Auther dada | Category PC・デジタル | Tag タグ:
Twitterにツイートする Facebookでシェアする はてなブックマーク

インストールはこのへんを参考にしました。

【PHP】Xdebugを利用したデバッグ環境構築(5.3)
Microsoft Visual C++ 2008 再頒布可能パッケージが必要

【PHP】Xdebugを利用したデバッグ環境構築(php5.2)
どのDLLが必要なのか。

XAMPPでXDebugを有効にする。 - ぐだぐだ日記
php.iniの設定

PHP向けのNetBeans IDEのエディタでのPHPソース・コードのデバッグ

しかしどうやってもインストールできない!!!
おっかしいなーとコマンドプロンプトで「php.exe -v」すると「with Xdebug」の文字が。

インストールできてんじゃん!
でも phpinfo() だと出てこない。なんでだろ? と思ったら
php.ini 自体が違っていて……。

コマンドプロンプトで実行するときは下記を。
C:\Program Files (x86)\Ampps\php\php.ini
Apacheから実行する時は下記を読んでいたんですね。
C:\Program Files (x86)\Ampps\apache\php.ini

そりゃ動かないわーーー!!

「こみまぷ」のApp Store審査経過

Posted 2013年2月28日 | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

追記(2013.3.21):
無事審査通って公開されましたー!
紹介ページそのうち新しくしますw

以下、当時の記事。

結果から言うとダメでした。^^;

iTunes Connect>Manage Your Pplications>Review Status>Resolution Centerで詳細を確認すると下記のような文章が。

We found that your app initiates the In App Purchase process in a non-standard manner.
 
Tapping buy button prompts the user to log in using Apple ID and password prior to displaying the In App Purchase confirmation window.
 
To restore previously purchased In App Purchase products, it would be appropriate to provide a "Restore" button as a separate process from the In App Purchase and initiate the restore process when the "Restore" button is tapped by the user.
 
Other/Information Needed
 
Additionally, we began the review of your app but are not able to continue because we need sample data that can be imported to the app so that we'd be able to access all the feature of your app.
 
Alternatively, you may provide a demo video that demonstrates your app in use.
 
You can provide a link to a demo video of your app in iTunes Connect. Go to "Manage Your Applications," select your app, click "Edit Information," then scroll to the "Review Notes" section and add the demonstration video access details.
 
For discrete code-level questions, you may wish to consult with Apple Developer Technical Support.

えーと、アプリ内課金で購入済みのユーザーに対するリストア(復元)処理を含めろということなのかな?
このへんを参考にしてみたいと思います。

≫アプリ内課金のリストア(購入済み)処理が原因でリジェクトされた場合の対処法
≫失敗しない iOS In-App Purchase プログラミング
≫iOS: In App Purchase、Restore処理のハマりポイント

あとはデモデータがないから検証が継続できないよと。動作しているデモムービーを用意してくれてもいいよ、ということですかね。

仕事が今詰っているのでまだまだ時間かかりそうです。

[FuelPHP]メールの文字化け対策<改>

Posted 2012年9月14日 | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

以前 FuelPHPのメール文字化け対策の記事を書きましたが不完全でした。
今度こそ対策ができた(と思う)のでまとめたいと思います。

FuelPHPからメールを送ったら Gmailでは正常に読めたのに、携帯では文字化けしてしまったのでその対処法をメモしときます。
といってもまた場当たり的な対処な感じですが。

続きを読む

[PhraseExpress]ただの辞書登録とは違う!一歩進んだ使い方

Posted 2012年5月3日 | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

PhraseExpressでただ文章を登録するだけだったらIMEの辞書登録で充分です。
ここではもう一歩進んだ使い方を紹介します。

インストールから基本的な使い方までは前の記事をご覧下さい。
≫[PhraseExpress]よく使うフレーズを簡単入力! PhraseExpressはじめの一歩 | RuputerFan

フレーズの間に文字を入力する

<strong>{#cursor}<strong>

フレーズの変換が行われた後{#cursor}の位置にカーソルが入りますので、そのまま入力が行えます。
HTMLのタグを登録する時なんかに有効です。

続きを読む

[PhraseExpress]よく使うフレーズを簡単入力! PhraseExpressはじめの一歩

Posted | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

TwitterなどのWebサービスやショピングなど、メールアドレスを入力することってものすごく多いですよね。例えば住所もそうですし、メールの書き出しもだいたい同じ文章を毎回入力しますよね。
こういった繰り返し使われる文字を少ない労力で入力しちゃおうというのが「PhraseExpress」です。

;mel ←キーボードで入力
[email protected]

;myad ←キーボードで入力
東京都千代田区外神田1丁目 ←即座に表示される文字

MacやiPhone/iPadなら「TextExpander」という超定番アプリがあるんですが、Windows版が存在しないので今回のアプリを使うことにしました。

一歩進んだ使い方についてはこちらをどうぞ。
≫[PhraseExpress]ただの辞書登録とは違う!一歩進んだ使い方 | RuputerFan

続きを読む

[FuelPHP]デフォルト以外のデータベースを利用する<改>

Posted 2012年4月19日 | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

先ほど書いた [FuelPHP]デフォルト以外のデータベースを利用する ですが、正しい方法を教えていただきました。そもそも FuelPHPには設定を切り替えるための簡単な方法がありました。

参考:環境 - 概要 - FuelPHP ドキュメント

fuel/app/config/ → 共通設定
fuel/app/config/development/ → 開発用設定
fuel/app/config/production/ → 公開(製品)用設定

という感じになっており、development/db.php に開発環境の、production/db.php に公開環境のDB設定を記述すればいいのでした。設定名も「default」のままで。

そして環境を切り替えるには、fuel/app/bootstrap.php を下記のように編集するだけです。

/**
 * Fuel::DEVELOPMENT 開発環境
 * Fuel::TEST テスト環境
 * Fuel::STAGE ステージング環境
 * Fuel::PRODUCTION 製品環境
 */
Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::PRODUCTION);

末尾の名前を書き換えるだけなんですね。便利。

追記

.htaccessで切り替える方法もあるようです。
参考:インストール方法 - インストール - FuelPHP ドキュメント

SetEnv FUEL_ENV production

環境変数「FUEL_ENV」を「development」にすれば開発環境なわけですね。

[FuelPHP]URLから「index.php」を消す

Posted | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

初期状態で作業をしているとURLは

http://hoge.com/mailform/index.php/entry/confirm

のようになり、「index.php」がURLに含まれてしまいます。
個人的にはちょっと美しくないなあと思うので消すことにしました。

まずはFulePHPインストールディレクトリの .htaccess を下記のようにします。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

次に fuel/app/config/config.php を下記のように編集します。

//'index_file'  => 'index.php',
  'index_file'  => false,

これでURLは下記のようになるはずです。

http://hoge.com/mailform/entry/confirm

参考:初心者がFuelPHPで動的リンクを張ってみた - letsspeak's diary

[FuelPHP]メールの文字化け対策

Posted | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

修正記事を書きましたので、そちらをご覧下さい。(2012.09.14)

FuelPHPからメールを送ったら Gmailでは正常に読めたのに、携帯では文字化けしてしまったのでその対処法をメモしときます。
といってもまた場当たり的な対処な感じですが。

続きを読む

カテゴリー