public function testFindMultiDirectArray()
{
R::nuke();
$collection = R::findMulti('shop,product', array(array('shop__id' => 1, 'product__id' => 1, 'product__name' => 'vase', 'product__shop_id' => 1), array('shop__id' => 1, 'product__id' => 2, 'product__name' => 'candle', 'product__shop_id' => 1), array('shop__id' => 1, 'product__id' => 3, 'product__name' => 'plate', 'product__shop_id' => 1)));
asrt(is_array($collection), TRUE);
asrt(isset($collection['shop']), TRUE);
asrt(isset($collection['product']), TRUE);
asrt((int) $collection['shop'][1]->id, 1);
asrt((int) $collection['product'][1]->id, 1);
asrt((int) $collection['product'][2]->id, 2);
asrt((int) $collection['product'][3]->id, 3);
asrt((int) $collection['product'][1]->shopID, 1);
asrt((int) $collection['product'][2]->shopID, 1);
asrt((int) $collection['product'][3]->shopID, 1);
asrt($collection['product'][1]->name, 'vase');
asrt($collection['product'][2]->name, 'candle');
asrt($collection['product'][3]->name, 'plate');
R::nuke();
$shop = R::dispense('shop');
$shop2 = R::dispense('shop');
$products = R::dispense('product', 3);
$price = R::dispense('price');
$price->tag = 5;
$products[0]->name = 'vase';
$products[1]->name = 'candle';
$products[2]->name = 'plate';
$products[1]->ownPriceList[] = $price;
$shop->ownProduct = $products;
R::store($shop);
$collection = R::findMulti('shop,product,price', '
SELECT shop.*, product.*, price.* FROM shop
LEFT JOIN product ON product.shop_id = shop.id
LEFT JOIN price ON price.product_id = product.id
', array(), array('0' => $this->map('shop', 'product'), '1' => $this->map('product', 'price')));
$collection = R::findMulti('shop,product', array(array('shop__id' => 1, 'product__id' => 1, 'product__name' => 'vase', 'product__shop_id' => 1), array('shop__id' => 1, 'product__id' => 2, 'product__name' => 'candle', 'product__shop_id' => 1), array('shop__id' => 1, 'product__id' => 3, 'product__name' => 'plate', 'product__shop_id' => 1), array('shop__id' => 1, 'product__id' => 2, 'product__name' => 'candle', 'product__shop_id' => 1)), array(), array(array('a' => 'shop', 'b' => 'product', 'matcher' => function ($a, $b) {
return $b->shopID == $a->id;
}, 'do' => function ($a, $b) {
return $a->noLoad()->ownProductList[] = $b;
})));
asrt(is_array($collection), TRUE);
asrt(isset($collection['shop']), TRUE);
asrt(isset($collection['product']), TRUE);
asrt((int) $collection['shop'][1]->id, 1);
asrt((int) $collection['product'][1]->id, 1);
asrt((int) $collection['product'][2]->id, 2);
asrt((int) $collection['product'][3]->id, 3);
asrt((int) $collection['product'][1]->shopID, 1);
asrt((int) $collection['product'][2]->shopID, 1);
asrt((int) $collection['product'][3]->shopID, 1);
asrt($collection['product'][1]->name, 'vase');
asrt($collection['product'][2]->name, 'candle');
asrt($collection['product'][3]->name, 'plate');
asrt(isset($collection['shop'][1]->ownProductList), TRUE);
asrt(is_array($collection['shop'][1]->ownProductList), TRUE);
asrt(count($collection['shop'][1]->ownProductList), 3);
asrt($collection['shop'][1]->ownProductList[0]->name, 'vase');
asrt($collection['shop'][1]->ownProductList[1]->name, 'candle');
asrt($collection['shop'][1]->ownProductList[2]->name, 'plate');
}