Idiormの使い方 〜データ取得編〜
4930 Views
idiorm
idiorm
前回の記事で紹介した内容を使用してデータベースの内容を取得する方法をご紹介したいと思います。
今回はWordPressで作られたサイトのデータベースを取得して行きたいと思います。
スポンサーリンク
目次
WordPressの記事を10件取得&表示
以下の条件で記事情報を取得したいと思います。
・データベースの$table_prefix名は「wp_」
・最新記事10件
・公開済みの記事のみ
・ポストタイプは「news」
・カスタムフィールド「src」の画像パスを取得
・カスタムフィールド「view」の値を取得
とします。
以下のコードで取得&表示が可能です。
<?php //---------------------------------------------------------------- //ライブラリを読み込む require_once("idiorm/idiorm.php"); require_once("paris/paris.php"); //---------------------------------------------------------------- //データベースの情報 $db_host = "データベースのホスト名"; $db_port = "ポートが必要な場合は記述"; $db_name = "データベース名"; $db_user = "データベースのユーザ名"; $db_password = "データベースのパスワード"; //---------------------------------------------------------------- //データベースへ接続 if (!empty($db_port)) { //ポートが指定されている場合 ORM::configure("mysql:host={$db_host};port={$db_port};dbname={$db_name}"); } else { //ポートが不要な場合 ORM::configure("mysql:host={$db_host};dbname={$db_name}"); } ORM::configure("username", $db_user); ORM::configure('password', $db_password); ORM::configure('driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); ORM::configure('error_mode', PDO::ERRMODE_WARNING); ORM::configure('logging', true); ORM::configure('caching', true); //キャッシュを有効 ORM::configure('caching_auto_clear', true); //INSERTやUPDATEでキャッシュをクリア //---------------------------------------------------------------- //取得設定 $table_prefix = "wp_"; $post_type = "news"; $posts_per_page = "10"; $post_status = "publish"; //---------------------------------------------------------------- //記事を取得 $news_posts = ORM::for_table("{$table_prefix}posts") ->table_alias("p1") ->select("p1.*") ->select_expr("p2.guid", "src") ->select_expr("pm2.meta_value", "view") ->left_outer_join("{$table_prefix}postmeta", array("p1.ID", "=", "pm1.post_id"), "pm1") ->left_outer_join("{$table_prefix}posts", array("pm1.meta_value", "=", "p2.ID"), "p2") ->left_outer_join("{$table_prefix}postmeta", array("p1.ID", "=", "pm2.post_id"), "pm2") ->where(array( "p1.post_type" => $post_type, "p1.post_status" => $post_status, "pm1.meta_key" => "src", "pm2.meta_key" => "view" )) ->order_by_desc("p1.post_date") ->offset(0) ->limit($posts_per_page) ->find_array() ; //---------------------------------------------------------------- //取得した記事を表示する if (isset($news_posts) && count($news_posts) > 0) { foreach ($news_posts as $v) { $post_id = $v['ID']; //ポストID $title = $v['post_title']; //タイトルを取得する $date = date("Y.m.d H:i", strtotime($v['post_date'])); //日付を取得 $content = $v['post_content']; //本文を取得 $src = $v['src']; //画像パス $view = $v['view']; //viewの値 echo " <article> <h1>{$title}</h1> <time>{$date}</time> <p>あなたは{$view}回目の閲覧者です。</p> <div class=\"content\"> <img src=\"{$src}\" alt=\"\"><br> {$content} </div> </article> "; } } else { echo "指定した条件の記事が取得できませんでした。"; }
以上です!
カスタムフィールドからデータを取得する時は
1.「left_outer_join」でデータを結びつけ
2.「select_expr」でmeta_valueの値に別名をつける
の手順で取得が可能です!
カスタムフィールドの画像を取得する場合は2のステップを無視して
2.「left_outer_join」でmeta_valueを投稿IDに結びつけ
3.「select_expr」でguidの値を別名につける
の手順で取得が可能でした!
公式サイトなどを参考にどんどん使い込んで見てください!
まとめ
次は新規追加・更新の紹介ができればと思います。
スポンサーリンク