这似乎是一个简单的问题,但我有点困惑。
如果我创建了几个bean:
list($product1, $product2, $product3) = R::dispense('product', 3);
...
和几个类别:
list($cat1, $cat2) = R::dispense('category', 2);
...
然后将它们与:
联系起来$product1->sharedCategory[] = $cat1;
$product3->sharedCategory[] = $cat1;
如何查询与$ cat1相关的所有产品?我应该回到第1和第3产品。
像我说的那样简单。在mysql中这是一个明智的选择,所以总是可以直接向red bean发送一个sql字符串,但肯定有一种方法可以做到这一点。感谢。
答案 0 :(得分:4)
我认为它反过来了(抱歉,如果我不对),因为逻辑上一个类别有许多产品而不是产品很多类别,如你所定义的那样。
========编辑部分====================
我删除了此处发布的小型来源,因为手册Manuall 是非常简单,更好,非常有用的示例代码如何连接,进行关联,更新等。我相信你会从中受益匪浅。如果手册有任何困难,很乐意提供帮助。
==========附加信息=======================
这里我只是放了一些源代码,没有改变我的衣服。试试这个代码吧,它可以按你想要的方式工作!
<?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);
?>