1

描述我的问题的最好方法是解释我的情况:

我正在使用 yii,因此任何响应都应面向该框架。

我有一个数据库,其中包含产品和类别的多对多关系,因此有一个产品表、一个类别表和一个用于它们之间关系的 category_product 表。

我也有一个用户表。允许用户购买某些类别的产品,因此 category_user 表描述了另一种多对多关系,其中现有关系表示允许用户购买该类别中的任何产品。

我的问题是:如果我当前有用户和产品,是否有一种简单的方法可以确定用户是否可以购买产品,这意味着用户和产品与同一类别存在关系。我很难找到一种有效或简单的方法来完成此任务,而不仅仅是获取与用户相关的类别 ID 数组和与产品相关的另一个类别 ID 数组,然后在其中搜索匹配项.

4

2 回答 2

2

我看到两种方法可以做到:

  1. 只需使用 ORM 功能来加载引用:

    isbelongTo($user, $product){ foreach($user->categories as $category){ foreach($category->products as $pr){ if($pr->id==$product->id) return true; } } return false; }

  2. 但相信我不会这样做,因为它必须加载一堆东西,而不是使用纯 sql,而且它不会使系统变得“智能”。ORM 也用于加载对象而不是记录,在我们的例子中,我们不关心对象,所以可以使用纯 sql:

    isbelongTo($user, $product){ $connection=Yii::app()->db; $sql = 'select * from category_user cu inner join category_product cp on cu.categoryId = cp.categoryId where cp.productId = :productId cu.userId = :userId'; $command=$connection->createCommand($sql); $command->bindParam(':productId',$product->id,PDO::PARAM_STR); $command->bindParam(':usertId',$user->id,PDO::PARAM_STR); $value=$command->queryScalar(); return $value > 0; //if greater then 0 that means it belong to, so returns true }

我肯定会选择第二种方法!

于 2012-10-09T16:36:30.760 回答
0

也许通过使用关系查询,你可以调用存在或类似的东西

于 2012-10-09T16:37:58.163 回答