敵は本能寺にあり!(謎)
持ち物が準備出来た太郎と次郎が街中を歩いているときに、攻撃的な人に遭遇してしまった状況をコード化しました。
マイブームなPhalconとMongoDBな環境で実装します。
Item同様にモデルとしてEnemyクラスを実装します。
Enemy.php
<?php
use Phalcon\Mvc\Collection;
class Enemy extends Collection
{
public function getSource()
{
return "enemy";
}
}
誰と遭遇するのわからないのが世の常。ランダムでMongoDBからEnemyを読み出してみます。
Enemyには、こんな感じの情報が入っているとして、
moga.php
$teki1 = new Enemy();
$teki1->name = '角刈り';
$teki1->rank = 1;
$teki1->weapon = '朽ち木';
$teki1->save();
$teki2 = new Enemy();
$teki2->name = 'リーゼント';
$teki2->rank = 1;
$teki2->weapon = '小石';
$teki2->save();
$teki3 = new Enemy();
$teki3->name = 'バンダナ';
$teki3->rank = 1;
$teki3->weapon = 'ハサミ';
$teki3->save();
$teki4 = new Enemy();
$teki4->name = 'グラサン';
$teki4->rank = 2;
$teki4->weapon = '竹ぼうき';
$teki4->save();
まだまだ、この兄弟は、駆け出しの悪童なので、ランクが1までのEnemyが遭遇対象とします。
まずは、このランク1までのEnemyの件数を数えます。
soga.php
// rank BETWEEN A AND B 的な条件
$query['conditions'] = array(
'rank' => array(
'$gte' => 1, // A
'$lte' => 1 // B
)
);
$kensu = Enemy::count($query);
この件数を使って乱数を生成し、ランダムレコードをスキップします。検索結果もとりあえず1件にします。
zoga.php
$query['skip'] = mt_rand(0, $kensu - 1);
$query['limit'] = 1;
Enemyが登場します。
boga.php
$enemy = Enemy::findFirst($query);
echo $enemy->name . "が、手に" . $enemy->weapon . "を持って現れた!!";
兄弟の運命や、いかに!!