Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

PHPとFileMaker ProによるWebアプリケーション構築(実装編)

ITエンジニアのためのFileMaker講座 第11回(後編)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/05/07 14:00
目次

レコードを検索する

 レコードを検索するには、newFindCommandクラスを使います。

$findCommand = $db -> newFindCommand("display");

 newFindCommandクラスにdisplayというレイアウト名を渡します。これによりdisplayレイアウトで検索するためのインスタンスが生成されます。

 ここではColorフィールドにYellow、SizeフィールドにLargeを含むレコードを検索する例を紹介します。

$findCommand -> addFindCriterion('Color', '==' . "Yellow");
$findCommand -> addFindCriterion('Size', '==' . "Large");

 検索条件を追加するにはaddFindCriterionクラスを使います。addFindCriterionクラスには「フィールド名」と「値」を与えます。ちなみに「値」の先頭にはFileMakerの検索用演算子( == は「フィールド全体が一致」を意味する)を用います。

 executeクラスで検索を実行します。

$result  = $findCommand -> execute();

 先のレコードに追加する場合と異なり、このままでは検索を実行しても、FileMaker Proのアプリケーション上で実行していないので結果は確認できません。そこで、以下のようにPHPで返された結果を表示します。

if(!FileMaker::isError($result)){
    $records = $result->getRecords();

    foreach($records as $record){
        echo $record -> getField('Color') . " and " . $record -> getField('Size') . '<br />';
    }
}

 !FileMaker::isError($result)は結果が存在すればという意味です。getRecordsで返された結果を配列$recordsに追加します。

 foreach($records as $record)では配列を順番に処理します。getFieldクラスでフィールドに対する値を返します。

レコード検索のサンプルソース(display_search.php)
<?php
/* 初期設定 */
$database = 'display';
$username = 'user';
$password = 'password';

/* FileMaker.phpの読み込み */
require_once('./API/FileMaker.php');

/* FileMakerインスタンスを作成 */
$db = new FileMaker();

/* データベースへの接続 */
$db -> setProperty('database', $database); 
$db -> setProperty('username', $username); 
$db -> setProperty('password', $password);

/* レコードの検索 */
$findCommand = $db -> newFindCommand("display");
$findCommand -> addFindCriterion('Color', '==' . "yellow");
$findCommand -> addFindCriterion('Size', '==' . "Large");
$result  = $findCommand -> execute();

if(!FileMaker::isError($result)){
    $records = $result->getRecords();

    foreach($records as $record){
        echo $record -> getField('Color') . " and " . $record -> getField('Size') . '<br />';
    }
}
?>

レコードを削除する

 レコードを削除するには、 newFindCommandクラスで対象レコードを絞り込んでから削除します。まず、先ほどのレコードの検索同様、newFindCommandを使って削除対象のレイアウトを指定します。

$deleteCommand = $db -> newFindCommand("display");

 検索キーとしてColorフィールドにYellowを追加して検索を実行します。このとき「==(フィールド全体が一致)」を条件として与えます。

$deleteCommand -> addFindCriterion('Color', '==' . "Yellow");
$result = $deleteCommand->execute();

 絞り込みが完了したところで、対象レコードに対してdeleteクラスを使ってレコードの削除を実行します。本稿では割愛しますが、対象レコードを絞り込んで削除するという手順を応用すると「フィールド内容の置換」もできます。

if(!Filemaker::isError($result)){
    $records =  $result->getRecords();
    foreach($records as $record){
        $result2  = $record -> delete();
    }
}
レコード削除のサンプルソース(display_delete.php)
<?php
/* 初期設定 */
$database = 'display';
$username = 'user';
$password = 'password';
$layout = 'display';

/* FileMaker.phpの読み込み */
require_once('./API/FileMaker.php');

/* FileMakerインスタンスを作成 */
$db = new FileMaker();

/* データベースへの接続 */
$db -> setProperty('database', $database); 
$db -> setProperty('username', $username); 
$db -> setProperty('password', $password);

/* レコードの削除 */
$deleteCommand = $db -> newFindCommand("display");
$deleteCommand -> addFindCriterion('Color', '==' . "Yellow");
$result = $deleteCommand->execute();

if(!Filemaker::isError($result)){
    $records =  $result->getRecords();
    foreach($records as $record){
        $result2  = $record -> delete();
    }
}
?>

 以上、駆け足で追加・検索・削除の方法を説明しましたが、この組み合わせがよく使われ、大半をカバーできます。ぜひマスターしてください。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 岡田 匡(オカダ マサシ)

    岐阜県大垣市のソフトピアジャパンと名古屋市に拠点を置く、WebシステムとFileMakerソリューション開発の会社、株式会社ワークスペースの代表取締役。1998年にCGIプログラミングでショッピングカートシステムを初めて開発。2001年にショッピングカートと連携するネット通販の受注管理システムを手掛...

バックナンバー

連載:ITエンジニアのためのFileMaker講座

もっと読む

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5