This seems like a simple question, but I'm somehow baffled.
If I create a couple of beans with:
list($product1, $product2, $product3) = R::dispense('product', 3);
...
and a couple of categories with:
list($cat1, $cat2) = R::dispense('category', 2);
...
then link them with:
$product1->sharedCategory[] = $cat1;
$product3->sharedCategory[] = $cat1;
how do I then query all products that are related to $cat1? I should get back product 1 and 3.
Like I said, simple. In mysql this is a no-brainer, so could always just send red bean an sql string, but there must be a way of doing this built it, surely.
Thanks.
I think it goes the other way around (sorry if I am not right) because logically a category has many products not a product many categories as you have defined it.
========Edited part====================
I deleted a small source posted here because the manual Manuall is super easy and much better and very helpful with sample code on how to connect, make association, updates etc etc. I am sure you will benefit a lot from it. If there is any difficulty with the manual glad to help.
========== Additional Information =======================
Here I just put some source code, did not change anything in my answear. Try this code, it works both ways as you want it!
<?PHP
echo '<pre>';
require('rb.php');
$toolbox = R::setup('mysql:host=localhost;dbname=my_ORM','root','');
$farm = R::dispense('building');
//create the product list
list($product1,$product2,$product3) = R::dispense('product',3);
//add attributes
$product1->name='prod1';
$product2->name='prod2';
$product3->name='prod3';
//create a list of categories
list($category1,$category2) = R::dispense('category',2);
//add attributes
$category1->name='categ1';
$category2->name='categ2';
//the connect beans together
R::associate($category1,$product1);
R::associate($category1,$product2);
R::associate($category1,$product3);
R::associate($category2,$product3);
//then store
R::store($product1);
R::store($product2);
R::store($product3);
R::store($category1);
R::store($category2);
//get id for category 1
$categId=R::getCell( " select `id` from `category` where `name`='categ1' ");
//get products for category 1
$results =
R::getAll( "
SELECT `product`.`id`,`product`.`name`
FROM `product` left JOIN `category_product`
on `category_product`.`product_id`= `product`.`id`
where `category_id`='".$categId."' ");
//display
print_r($results);
//get categories for product3
$prodId=R::getCell( " select `id` from `product` where `name`='prod3' ");
$results =
R::getAll( "
SELECT `category`.`id`,`category`.`name`
FROM `category` left JOIN `category_product`
on `category_product`.`category_id`= `category`.`id`
where `product_id`='".$prodId."' ");
print_r($results);
?>