Hatena::Groupnequal

nequal::unfair

2008-03-28

Ethna+rhaco=

| 21:26 | Ethna+rhaco= - nequal::unfair を含むブックマーク はてなブックマーク - Ethna+rhaco= - nequal::unfair

前からEthnaのlib内にrhacoをcoして、ライブラリとして使いまくってたけど、EthnaDBの貧弱さとかもあって、rhacoDBとかも使いたくなった。

欲しくなったので、作る事にする。(たぶん)

Ethna + rhaco = Econa


体に優しそう。


etc/project.xml

とかでdatabaseのモデルを定義して、

ethna rhaco-setup

とかでモデルを app/model とかに設置するとか。

etc/__setting__.php とかも生成した方が良いのかなぁ。

でも設定は etc/APPID-ini.php でやりたいよねえ。

etc/APPID-ini.php から__setting__.phpを自動的に設定するようにしてやればいいのかな。

Ethnaにどこまでrhacoを入れるかも問題かなあ。

Loggerとかも多少弄らないとダメかもな。。。


だとすると、作るのは

Econa_DB (DbUtilとの融合)

Econa_Logger (rhacoDB内できっとrhacoのLogger使ってるので)

Econa_Backend (getObjectでrhacoのモデルを取得したい)

2008-03-18

ちょっときになった

21:26 | ちょっときになった - nequal::unfair を含むブックマーク はてなブックマーク - ちょっときになった - nequal::unfair

<?php
echo 'array', PHP_EOL;
$array = array(1, 2, '3', '4', array('5', 6));
var_dump($array);

echo PHP_EOL, PHP_EOL;
echo 'int key hash', PHP_EOL;
$array = array(0 => 1, 1 => 2, 6 => '3', 5 => array(4, 5));
var_dump($array);

echo PHP_EOL, PHP_EOL;
echo 'array key hash',PHP_EOL;
$key1 = array(1);
$key2 = array('test');
$key3 = array(array('unk' => 'windows'));
$array = array($key1 => 'key1', $key2 => 'key2', $key3 => 'key3');
var_dump($array);

echo PHP_EOL, PHP_EOL;
echo 'object key hash',PHP_EOL;
$key1 = new stdClass();
$key2 = new stdClass();
$key2->id = 'value';
$key3 = array(new stdClass());
$array = array($key1 => 'key1', $key2 => 'key2', $key3 => 'key3');
var_dump($array);

array

array(5) {

[0]=>

int(1)

[1]=>

int(2)

[2]=>

string(1) "3"

[3]=>

string(1) "4"

[4]=>

array(2) {

[0]=>

string(1) "5"

[1]=>

int(6)

}

}


int key hash

array(4) {

[0]=>

int(1)

[1]=>

int(2)

[6]=>

string(1) "3"

[5]=>

array(2) {

[0]=>

int(4)

[1]=>

int(5)

}

}


array key hash

Warning: Illegal offset type in /Users/riaf/tmp/hash.php on line 16

Call Stack:

0.0005 59928 1. {main}() /Users/riaf/tmp/hash.php:0


Warning: Illegal offset type in /Users/riaf/tmp/hash.php on line 16

Call Stack:

0.0005 59928 1. {main}() /Users/riaf/tmp/hash.php:0


Warning: Illegal offset type in /Users/riaf/tmp/hash.php on line 16

Call Stack:

0.0005 59928 1. {main}() /Users/riaf/tmp/hash.php:0

array(0) {

}


object key hash

Warning: Illegal offset type in /Users/riaf/tmp/hash.php on line 25

Call Stack:

0.0005 59928 1. {main}() /Users/riaf/tmp/hash.php:0


Warning: Illegal offset type in /Users/riaf/tmp/hash.php on line 25

Call Stack:

0.0005 59928 1. {main}() /Users/riaf/tmp/hash.php:0


Warning: Illegal offset type in /Users/riaf/tmp/hash.php on line 25

Call Stack:

0.0005 59928 1. {main}() /Users/riaf/tmp/hash.php:0

array(0) {

}

思ったより面白くなかった。

ApriliansahApriliansah2012/03/26 21:59Artilces like this really grease the shafts of knowledge.

ahboqdpfahboqdpf2012/03/27 07:26KH6vXf <a href="http://egcroakoqlrs.com/">egcroakoqlrs</a>

pvtlyuedjcpvtlyuedjc2012/03/28 08:23P6vhxR , [url=http://wbouikcacwok.com/]wbouikcacwok[/url], [link=http://tjbghzoqpivj.com/]tjbghzoqpivj[/link], http://rmsyruqnvpgg.com/

FloraFlora2013/07/06 14:51Whoever wrote this, you know how to make a good atricle.

RemyaRemya2013/07/06 23:47Big help, big help. And <a href="http://hhuucrvz.com">suitvlaepre</a> news of course.

RemyaRemya2013/07/06 23:47Big help, big help. And <a href="http://hhuucrvz.com">suitvlaepre</a> news of course.

RemyaRemya2013/07/06 23:47Big help, big help. And <a href="http://hhuucrvz.com">suitvlaepre</a> news of course.

AimanAiman2013/07/10 05:47Gosh, I wish I would have had that <a href="http://gnhpvbs.com">intamrofion</a> earlier!

AimanAiman2013/07/10 05:47Gosh, I wish I would have had that <a href="http://gnhpvbs.com">intamrofion</a> earlier!

AimanAiman2013/07/10 05:47Gosh, I wish I would have had that <a href="http://gnhpvbs.com">intamrofion</a> earlier!

2008-03-14

Conveyorのプラグインを作る

| 02:53 | Conveyorのプラグインを作る - nequal::unfair を含むブックマーク はてなブックマーク - Conveyorのプラグインを作る - nequal::unfair

Conveyor?

PHP版のplaggerみたいなもの。

すべてブラウザ上で設定が可能。

rhacoで作られている。


種類

ConveyorのWorker(プラグイン)は大きく3種類にわけられる

  • Subscription
  • Filter
  • Publish

この3つで、Rss2.0のオブジェクトを受け取って、次のWorkerに渡す。というコードを書く。

作ったWorkerは、

library/workers/[CLASS名]/[CLASS名].php

のように設置する。


たとえば

<?php
class CustomfeedHoge extends SubscriptionBase{
    function execute($rss){
        // 取得処理をして、rss20オブジェクトに詰める
        return $rss;
    }
}

動かす

後は適当に動かせばok

IchachIchach2013/07/04 14:24This piece was a lifejacket that saved me from drnwonig.

YarlinYarlin2013/07/05 03:29Thanks for <a href="http://yujvdhvdwfd.com">shairng.</a> Always good to find a real expert.

YarlinYarlin2013/07/05 03:29Thanks for <a href="http://yujvdhvdwfd.com">shairng.</a> Always good to find a real expert.

YarlinYarlin2013/07/05 03:29Thanks for <a href="http://yujvdhvdwfd.com">shairng.</a> Always good to find a real expert.

FiorelloFiorello2013/07/05 09:55Taking the ovveriew, this post hits the spot http://dogkgnrpl.com [url=http://uhfqycgcez.com]uhfqycgcez[/url] [link=http://vcblliimo.com]vcblliimo[/link]

FiorelloFiorello2013/07/05 09:55Taking the ovveriew, this post hits the spot http://dogkgnrpl.com [url=http://uhfqycgcez.com]uhfqycgcez[/url] [link=http://vcblliimo.com]vcblliimo[/link]

FiorelloFiorello2013/07/05 09:55Taking the ovveriew, this post hits the spot http://dogkgnrpl.com [url=http://uhfqycgcez.com]uhfqycgcez[/url] [link=http://vcblliimo.com]vcblliimo[/link]

AlexAlex2013/07/07 12:40You've really captured all the <a href="http://ounehyoxh.com">eslnatiess</a> in this subject area, haven't you?

AlexAlex2013/07/07 12:40You've really captured all the <a href="http://ounehyoxh.com">eslnatiess</a> in this subject area, haven't you?

AlexAlex2013/07/07 12:40You've really captured all the <a href="http://ounehyoxh.com">eslnatiess</a> in this subject area, haven't you?

JuliaJulia2013/07/09 12:02That kind of thnnikig shows you're an expert http://exsfgtx.com [url=http://yefqbc.com]yefqbc[/url] [link=http://ksljfoimxn.com]ksljfoimxn[/link]

JuliaJulia2013/07/09 12:02That kind of thnnikig shows you're an expert http://exsfgtx.com [url=http://yefqbc.com]yefqbc[/url] [link=http://ksljfoimxn.com]ksljfoimxn[/link]

JuliaJulia2013/07/09 12:02That kind of thnnikig shows you're an expert http://exsfgtx.com [url=http://yefqbc.com]yefqbc[/url] [link=http://ksljfoimxn.com]ksljfoimxn[/link]

2008-03-01

dankogaiってspamブロガーでしょ?

17:36 | dankogaiってspamブロガーでしょ? - nequal::unfair を含むブックマーク はてなブックマーク - dankogaiってspamブロガーでしょ? - nequal::unfair

エラーが出るとそのエラーで検索してみろってたまにアドバイスすることあるけど、404で検索したらperl信者でPHP宣伝部長のサスペンダーの人のブログがトップに出てくる。


phpの関数名で検索して引っかかりまくるphpspotとかzapanet並みにうざいんじゃないかって思う。あと、プラスアルファとかいうサーバー屋。

俺は404じゃ検索しないけどさ><

2008-02-14

rhacoのCriteriaまわりを整理する準備

| 02:57 | rhacoのCriteriaまわりを整理する準備 - nequal::unfair を含むブックマーク はてなブックマーク - rhacoのCriteriaまわりを整理する準備 - nequal::unfair

とりあえず、irhacoを使って、返り値をL::dにぶち込む。

目次

  • [draft]rhacoのCriteriaまわりを整理する準備
    • 用意したテーブル
    • Itemの中身
    • Categoryの中身
    • CategoriesItemsの中身
    • select時にdependしてみる
    • factしてみる
    • factして、flatしてみる。
    • factでflatして、さらにCategoryで絞り込む
    • まとめ
    • 追記

用意したテーブル

<project rhacover="1.4.1" version="1.0.0" name="rhadb" xmlns="http://rhaco.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://rhaco.org http://media.rhaco.org/project.xsd">
    <database name="test" renew="true">
        <table name="item" admin="true">
            <column name="id" type="serial" />
            <column name="name" type="string" require="true" />
            <column name="description" type="text" />
        </table>
        <table name="category" admin="true">
            <column name="id" type="serial" />
            <column name="title" type="string" require="true" />
            <column name="description" type="text" />
        </table>
        <table name="categories_items" admin="true">
            <column name="id" type="serial" />
            <column name="item_id" type="integer" reference="item.id" />
            <column name="category_id" type="integer" reference="category.id" />
        </table>
    </database>
</project>

Itemの中身

>> L::d($db->select(new Item()));
array(2) {
  [0]=>
  string(62) "/Users/riaf/Sites/test/rhadb/irhaco.php(138) : eval()'d code:1"
  [1]=>
  array(5) {
    [0]=>
    object(Item)#6 (4) {
      ["id"]=>
      int(1)
      ["name"]=>
      string(5) "test1"
      ["description"]=>
      string(1038) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!

"
      ["dependCategoriesItemss"]=>
      NULL
    }
    [1]=>
    object(Item)#17 (4) {
      ["id"]=>
      int(2)
      ["name"]=>
      string(5) "test2"
      ["description"]=>
      string(458) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
2222222222

"
      ["dependCategoriesItemss"]=>
      NULL
    }
    [2]=>
    object(Item)#16 (4) {
      ["id"]=>
      int(3)
      ["name"]=>
      string(5) "test3"
      ["description"]=>
      string(7) "3だよ"
      ["dependCategoriesItemss"]=>
      NULL
    }
    [3]=>
    object(Item)#15 (4) {
      ["id"]=>
      int(4)
      ["name"]=>
      string(5) "test4"
      ["description"]=>
      string(8) "unkeunke"
      ["dependCategoriesItemss"]=>
      NULL
    }
    [4]=>
    object(Item)#7 (4) {
      ["id"]=>
      int(5)
      ["name"]=>
      string(5) "test5"
      ["description"]=>
      string(22) "てぃうんてぃうn"
      ["dependCategoriesItemss"]=>
      NULL
    }
  }
}

Categoryの中身

>> L::d($db->select(new Category()));
array(2) {
  [0]=>
  string(62) "/Users/riaf/Sites/test/rhadb/irhaco.php(138) : eval()'d code:1"
  [1]=>
  array(3) {
    [0]=>
    object(Category)#20 (4) {
      ["id"]=>
      int(1)
      ["title"]=>
      string(24) "うんこなカテゴリ"
      ["description"]=>
      string(24) "みんなもだいすき"
      ["dependCategoriesItemss"]=>
      NULL
    }
    [1]=>
    object(Category)#15 (4) {
      ["id"]=>
      int(2)
      ["title"]=>
      string(27) "いまどきPHPじゃない"
      ["description"]=>
      string(33) "ありえないですよねー。"
      ["dependCategoriesItemss"]=>
      NULL
    }
    [2]=>
    object(Category)#21 (4) {
      ["id"]=>
      int(3)
      ["title"]=>
      string(24) "PHPが許されるのは"
      ["description"]=>
      string(30) "小学生までだよねー。"
      ["dependCategoriesItemss"]=>
      NULL
    }
  }
}

CategoriesItemsの中身

>> L::d($db->select(new CategoriesItems()));
array(2) {
  [0]=>
  string(62) "/Users/riaf/Sites/test/rhadb/irhaco.php(138) : eval()'d code:1"
  [1]=>
  array(4) {
    [0]=>
    object(CategoriesItems)#26 (5) {
      ["id"]=>
      int(1)
      ["itemId"]=>
      int(5)
      ["categoryId"]=>
      int(1)
      ["factItemId"]=>
      NULL
      ["factCategoryId"]=>
      NULL
    }
    [1]=>
    object(CategoriesItems)#15 (5) {
      ["id"]=>
      int(2)
      ["itemId"]=>
      int(2)
      ["categoryId"]=>
      int(2)
      ["factItemId"]=>
      NULL
      ["factCategoryId"]=>
      NULL
    }
    [2]=>
    object(CategoriesItems)#27 (5) {
      ["id"]=>
      int(3)
      ["itemId"]=>
      int(1)
      ["categoryId"]=>
      int(3)
      ["factItemId"]=>
      NULL
      ["factCategoryId"]=>
      NULL
    }
    [3]=>
    object(CategoriesItems)#28 (5) {
      ["id"]=>
      int(4)
      ["itemId"]=>
      int(1)
      ["categoryId"]=>
      int(2)
      ["factItemId"]=>
      NULL
      ["factCategoryId"]=>
      NULL
    }
  }
}

select時にdependしてみる

Itemに

>> L::d($db->select(new Item(), new C(Q::depend())));
array(2) {
  [0]=>
  string(62) "/Users/riaf/Sites/test/rhadb/irhaco.php(138) : eval()'d code:1"
  [1]=>
  array(5) {
    [0]=>
    object(Item)#26 (4) {
      ["id"]=>
      int(1)
      ["name"]=>
      string(5) "test1"
      ["description"]=>
      string(1038) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!

"
      ["dependCategoriesItemss"]=>
      array(2) {
        [0]=>
        object(CategoriesItems)#39 (5) {
          ["id"]=>
          int(3)
          ["itemId"]=>
          int(1)
          ["categoryId"]=>
          int(3)
          ["factItemId"]=>
          NULL
          ["factCategoryId"]=>
          NULL
        }
        [1]=>
        object(CategoriesItems)#40 (5) {
          ["id"]=>
          int(4)
          ["itemId"]=>
          int(1)
          ["categoryId"]=>
          int(2)
          ["factItemId"]=>
          NULL
          ["factCategoryId"]=>
          NULL
        }
      }
    }
    [1]=>
    object(Item)#28 (4) {
      ["id"]=>
      int(2)
      ["name"]=>
      string(5) "test2"
      ["description"]=>
      string(458) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
2222222222

"
      ["dependCategoriesItemss"]=>
      array(1) {
        [0]=>
        object(CategoriesItems)#37 (5) {
          ["id"]=>
          int(2)
          ["itemId"]=>
          int(2)
          ["categoryId"]=>
          int(2)
          ["factItemId"]=>
          NULL
          ["factCategoryId"]=>
          NULL
        }
      }
    }
    [2]=>
    object(Item)#21 (4) {
      ["id"]=>
      int(3)
      ["name"]=>
      string(5) "test3"
      ["description"]=>
      string(7) "3だよ"
      ["dependCategoriesItemss"]=>
      NULL
    }
    [3]=>
    object(Item)#15 (4) {
      ["id"]=>
      int(4)
      ["name"]=>
      string(5) "test4"
      ["description"]=>
      string(8) "unkeunke"
      ["dependCategoriesItemss"]=>
      NULL
    }
    [4]=>
    object(Item)#27 (4) {
      ["id"]=>
      int(5)
      ["name"]=>
      string(5) "test5"
      ["description"]=>
      string(22) "てぃうんてぃうn"
      ["dependCategoriesItemss"]=>
      array(1) {
        [0]=>
        object(CategoriesItems)#38 (5) {
          ["id"]=>
          int(1)
          ["itemId"]=>
          int(5)
          ["categoryId"]=>
          int(1)
          ["factItemId"]=>
          NULL
          ["factCategoryId"]=>
          NULL
        }
      }
    }
  }
}

Itemに対して、referenceしてるオブジェクトがくっついてくる。


factしてみる

CategoriesItems

>> L::d($db->select(new CategoriesItems(), new C(Q::fact())));
array(2) {
  [0]=>
  string(62) "/Users/riaf/Sites/test/rhadb/irhaco.php(138) : eval()'d code:1"
  [1]=>
  array(4) {
    [0]=>
    object(CategoriesItems)#29 (5) {
      ["id"]=>
      int(1)
      ["itemId"]=>
      int(5)
      ["categoryId"]=>
      int(1)
      ["factItemId"]=>
      object(Item)#28 (4) {
        ["id"]=>
        int(5)
        ["name"]=>
        string(5) "test5"
        ["description"]=>
        string(22) "てぃうんてぃうn"
        ["dependCategoriesItemss"]=>
        NULL
      }
      ["factCategoryId"]=>
      object(Category)#30 (4) {
        ["id"]=>
        int(1)
        ["title"]=>
        string(24) "うんこなカテゴリ"
        ["description"]=>
        string(24) "みんなもだいすき"
        ["dependCategoriesItemss"]=>
        NULL
      }
    }
    [1]=>
    object(CategoriesItems)#39 (5) {
      ["id"]=>
      int(2)
      ["itemId"]=>
      int(2)
      ["categoryId"]=>
      int(2)
      ["factItemId"]=>
      object(Item)#32 (4) {
        ["id"]=>
        int(2)
        ["name"]=>
        string(5) "test2"
        ["description"]=>
        string(458) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
2222222222

"
        ["dependCategoriesItemss"]=>
        NULL
      }
      ["factCategoryId"]=>
      object(Category)#33 (4) {
        ["id"]=>
        int(2)
        ["title"]=>
        string(27) "いまどきPHPじゃない"
        ["description"]=>
        string(33) "ありえないですよねー。"
        ["dependCategoriesItemss"]=>
        NULL
      }
    }
    [2]=>
    object(CategoriesItems)#31 (5) {
      ["id"]=>
      int(3)
      ["itemId"]=>
      int(1)
      ["categoryId"]=>
      int(3)
      ["factItemId"]=>
      object(Item)#36 (4) {
        ["id"]=>
        int(1)
        ["name"]=>
        string(5) "test1"
        ["description"]=>
        string(1038) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!

"
        ["dependCategoriesItemss"]=>
        NULL
      }
      ["factCategoryId"]=>
      object(Category)#41 (4) {
        ["id"]=>
        int(3)
        ["title"]=>
        string(24) "PHPが許されるのは"
        ["description"]=>
        string(30) "小学生までだよねー。"
        ["dependCategoriesItemss"]=>
        NULL
      }
    }
    [3]=>
    object(CategoriesItems)#35 (5) {
      ["id"]=>
      int(4)
      ["itemId"]=>
      int(1)
      ["categoryId"]=>
      int(2)
      ["factItemId"]=>
      object(Item)#43 (4) {
        ["id"]=>
        int(1)
        ["name"]=>
        string(5) "test1"
        ["description"]=>
        string(1038) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!

"
        ["dependCategoriesItemss"]=>
        NULL
      }
      ["factCategoryId"]=>
      object(Category)#44 (4) {
        ["id"]=>
        int(2)
        ["title"]=>
        string(27) "いまどきPHPじゃない"
        ["description"]=>
        string(33) "ありえないですよねー。"
        ["dependCategoriesItemss"]=>
        NULL
      }
    }
  }
}

reference先のデータも一緒に拾ってくる。


factして、flatしてみる。

CategoriesItemsのid=1のもの

>> L::d($db->select(new CategoriesItems(), new C(Q::eq(CategoriesItems::columnId(), 1), Q::fact(), Q::flat())));
PHP Notice:  Undefined index:  Item in /Users/riaf/Develop/php/lib/rhaco/Rhaco.php(372) : eval()'d code on line 29
PHP Notice:  Undefined index:  Category in /Users/riaf/Develop/php/lib/rhaco/Rhaco.php(372) : eval()'d code on line 27
PHP Notice:  Undefined index:  CategoriesItems in /Users/riaf/Develop/php/lib/rhaco/Rhaco.php(372) : eval()'d code on line 21
array(2) {
  [0]=>
  string(62) "/Users/riaf/Sites/test/rhadb/irhaco.php(138) : eval()'d code:1"
  [1]=>
  array(1) {
    [0]=>
    object(CategoriesItems__Item__Category__CategoriesItems)#21 (10) {
      ["CLASS"]=>
      array(3) {
        ["Item"]=>
        object(Item)#50 (4) {
          ["id"]=>
          &int(1)
          ["name"]=>
          &string(5) "test5"
          ["description"]=>
          &string(22) "てぃうんてぃうn"
          ["dependCategoriesItemss"]=>
          &NULL
        }
        ["Category"]=>
        object(Category)#36 (4) {
          ["id"]=>
          &int(1)
          ["title"]=>
          &string(24) "うんこなカテゴリ"
          ["description"]=>
          &string(22) "てぃうんてぃうn"
          ["dependCategoriesItemss"]=>
          &NULL
        }
        ["CategoriesItems"]=>
        object(CategoriesItems)#49 (5) {
          ["id"]=>
          &int(1)
          ["itemId"]=>
          &int(5)
          ["categoryId"]=>
          &int(1)
          ["factItemId"]=>
          &object(Item)#39 (4) {
            ["id"]=>
            int(5)
            ["name"]=>
            string(5) "test5"
            ["description"]=>
            string(22) "てぃうんてぃうn"
            ["dependCategoriesItemss"]=>
            NULL
          }
          ["factCategoryId"]=>
          &object(Category)#28 (4) {
            ["id"]=>
            int(1)
            ["title"]=>
            string(24) "うんこなカテゴリ"
            ["description"]=>
            string(24) "みんなもだいすき"
            ["dependCategoriesItemss"]=>
            NULL
          }
        }
      }
      ["title"]=>
      &string(24) "うんこなカテゴリ"
      ["name"]=>
      &string(5) "test5"
      ["description"]=>
      &string(22) "てぃうんてぃうn"
      ["dependCategoriesItemss"]=>
      &NULL
      ["id"]=>
      &int(1)
      ["itemId"]=>
      &int(5)
      ["categoryId"]=>
      &int(1)
      ["factItemId"]=>
      &object(Item)#39 (4) {
        ["id"]=>
        int(5)
        ["name"]=>
        string(5) "test5"
        ["description"]=>
        string(22) "てぃうんてぃうn"
        ["dependCategoriesItemss"]=>
        NULL
      }
      ["factCategoryId"]=>
      &object(Category)#28 (4) {
        ["id"]=>
        int(1)
        ["title"]=>
        string(24) "うんこなカテゴリ"
        ["description"]=>
        string(24) "みんなもだいすき"
        ["dependCategoriesItemss"]=>
        NULL
      }
    }
  }
}

なんかすごいオブジェクトが返ってきた。


factでflatして、さらにCategoryで絞り込む

CategoriesItemsでselectして、CategoryのIDが2の物を拾ってくる。

>> L::d($db->select(new CategoriesItems(), new C(Q::eq(Category::columnId(), 2), Q::fact(), Q::flat())));
PHP Notice:  Undefined index:  Item in /Users/riaf/Develop/php/lib/rhaco/Rhaco.php(372) : eval()'d code on line 29
PHP Notice:  Undefined index:  Category in /Users/riaf/Develop/php/lib/rhaco/Rhaco.php(372) : eval()'d code on line 27
PHP Notice:  Undefined index:  CategoriesItems in /Users/riaf/Develop/php/lib/rhaco/Rhaco.php(372) : eval()'d code on line 21
PHP Notice:  Undefined index:  Item in /Users/riaf/Develop/php/lib/rhaco/Rhaco.php(372) : eval()'d code on line 29
PHP Notice:  Undefined index:  Category in /Users/riaf/Develop/php/lib/rhaco/Rhaco.php(372) : eval()'d code on line 27
PHP Notice:  Undefined index:  CategoriesItems in /Users/riaf/Develop/php/lib/rhaco/Rhaco.php(372) : eval()'d code on line 21
array(2) {
  [0]=>
  string(62) "/Users/riaf/Sites/test/rhadb/irhaco.php(138) : eval()'d code:1"
  [1]=>
  array(2) {
    [0]=>
    object(CategoriesItems__Item__Category__CategoriesItems)#58 (10) {
      ["CLASS"]=>
      array(3) {
        ["Item"]=>
        object(Item)#48 (4) {
          ["id"]=>
          &int(2)
          ["name"]=>
          &string(5) "test2"
          ["description"]=>
          &string(458) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
2222222222

"
          ["dependCategoriesItemss"]=>
          &NULL
        }
        ["Category"]=>
        object(Category)#43 (4) {
          ["id"]=>
          &int(2)
          ["title"]=>
          &string(27) "いまどきPHPじゃない"
          ["description"]=>
          &string(458) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
2222222222

"
          ["dependCategoriesItemss"]=>
          &NULL
        }
        ["CategoriesItems"]=>
        object(CategoriesItems)#45 (5) {
          ["id"]=>
          &int(2)
          ["itemId"]=>
          &int(2)
          ["categoryId"]=>
          &int(2)
          ["factItemId"]=>
          &object(Item)#50 (4) {
            ["id"]=>
            int(2)
            ["name"]=>
            string(5) "test2"
            ["description"]=>
            string(458) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
2222222222

"
            ["dependCategoriesItemss"]=>
            NULL
          }
          ["factCategoryId"]=>
          &object(Category)#52 (4) {
            ["id"]=>
            int(2)
            ["title"]=>
            string(27) "いまどきPHPじゃない"
            ["description"]=>
            string(33) "ありえないですよねー。"
            ["dependCategoriesItemss"]=>
            NULL
          }
        }
      }
      ["title"]=>
      &string(27) "いまどきPHPじゃない"
      ["name"]=>
      &string(5) "test2"
      ["description"]=>
      &string(458) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
2222222222

"
      ["dependCategoriesItemss"]=>
      &NULL
      ["id"]=>
      &int(2)
      ["itemId"]=>
      &int(2)
      ["categoryId"]=>
      &int(2)
      ["factItemId"]=>
      &object(Item)#50 (4) {
        ["id"]=>
        int(2)
        ["name"]=>
        string(5) "test2"
        ["description"]=>
        string(458) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
2222222222

"
        ["dependCategoriesItemss"]=>
        NULL
      }
      ["factCategoryId"]=>
      &object(Category)#52 (4) {
        ["id"]=>
        int(2)
        ["title"]=>
        string(27) "いまどきPHPじゃない"
        ["description"]=>
        string(33) "ありえないですよねー。"
        ["dependCategoriesItemss"]=>
        NULL
      }
    }
    [1]=>
    object(CategoriesItems__Item__Category__CategoriesItems)#31 (10) {
      ["CLASS"]=>
      array(3) {
        ["Item"]=>
        object(Item)#38 (4) {
          ["id"]=>
          &int(4)
          ["name"]=>
          &string(5) "test1"
          ["description"]=>
          &string(1038) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!

"
          ["dependCategoriesItemss"]=>
          &NULL
        }
        ["Category"]=>
        object(Category)#30 (4) {
          ["id"]=>
          &int(4)
          ["title"]=>
          &string(27) "いまどきPHPじゃない"
          ["description"]=>
          &string(1038) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!

"
          ["dependCategoriesItemss"]=>
          &NULL
        }
        ["CategoriesItems"]=>
        object(CategoriesItems)#55 (5) {
          ["id"]=>
          &int(4)
          ["itemId"]=>
          &int(1)
          ["categoryId"]=>
          &int(2)
          ["factItemId"]=>
          &object(Item)#32 (4) {
            ["id"]=>
            int(1)
            ["name"]=>
            string(5) "test1"
            ["description"]=>
            string(1038) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!

"
            ["dependCategoriesItemss"]=>
            NULL
          }
          ["factCategoryId"]=>
          &object(Category)#27 (4) {
            ["id"]=>
            int(2)
            ["title"]=>
            string(27) "いまどきPHPじゃない"
            ["description"]=>
            string(33) "ありえないですよねー。"
            ["dependCategoriesItemss"]=>
            NULL
          }
        }
      }
      ["title"]=>
      &string(27) "いまどきPHPじゃない"
      ["name"]=>
      &string(5) "test1"
      ["description"]=>
      &string(1038) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!

"
      ["dependCategoriesItemss"]=>
      &NULL
      ["id"]=>
      &int(4)
      ["itemId"]=>
      &int(1)
      ["categoryId"]=>
      &int(2)
      ["factItemId"]=>
      &object(Item)#32 (4) {
        ["id"]=>
        int(1)
        ["name"]=>
        string(5) "test1"
        ["description"]=>
        string(1038) "てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!
てすとだおおおおおおおおおおおおおおおおおおお!

"
        ["dependCategoriesItemss"]=>
        NULL
      }
      ["factCategoryId"]=>
      &object(Category)#27 (4) {
        ["id"]=>
        int(2)
        ["title"]=>
        string(27) "いまどきPHPじゃない"
        ["description"]=>
        string(33) "ありえないですよねー。"
        ["dependCategoriesItemss"]=>
        NULL
      }
    }
  }
}

これ投げてから、単純に Q::eq(CategoriesItems::columnCategoryId(), 2) で良い気がした。


まとめ

rhacoのCriteriaは超強力。


追記

実験に使ったデータのexport

http://riaf.org/tmp/rhadb/

tokushimatokushima2008/02/15 17:18なんかNoticeでてますね><
データをexportしてもらえると幸せ

tokushimatokushima2008/02/15 23:22revision 2739.でNoticesのバグ修正しました。

JonnieJonnie2013/07/03 21:52An awnser from an expert! Thanks for contributing.

SavinSavin2013/07/05 09:26That in'htigss just what I've been looking for. Thanks! http://olnpkxamwdt.com [url=http://onbwaintypv.com]onbwaintypv[/url] [link=http://kszpezoiw.com]kszpezoiw[/link]

SavinSavin2013/07/05 09:26That in'htigss just what I've been looking for. Thanks! http://olnpkxamwdt.com [url=http://onbwaintypv.com]onbwaintypv[/url] [link=http://kszpezoiw.com]kszpezoiw[/link]

SavinSavin2013/07/05 09:26That in'htigss just what I've been looking for. Thanks! http://olnpkxamwdt.com [url=http://onbwaintypv.com]onbwaintypv[/url] [link=http://kszpezoiw.com]kszpezoiw[/link]

KidusKidus2013/07/07 12:05<a href=\"http://zhjfgnk.com\">Aritelcs</a> like this make life so much simpler.

KidusKidus2013/07/07 12:05<a href=\"http://zhjfgnk.com\">Aritelcs</a> like this make life so much simpler.

KidusKidus2013/07/07 12:05<a href=\"http://zhjfgnk.com\">Aritelcs</a> like this make life so much simpler.