0

我正在检索数据:

$mydata = $this->ProductList->find('all', array('order' => 'rand()', 'conditions' => array('name' => 'we love')));

我已经建立了与 Product 模型的 HABTM 关系。如您所见,我正在获取“我们喜欢”列表中的所有产品。现在,我希望我检索的那些产品是随机的。但它们不是,相反,MySQL 在 ProductList 模型上是随机的,正如您在 SQL 中看到的那样。这是为什么?我怎样才能获得产品的随机提取呢?

生成的 MySQL 查询:

SELECT `ProductList`.`id`, `ProductList`.`name` FROM `database`.`product_lists` AS `ProductList` WHERE `name` = 'we love' ORDER BY rand() ASC

SELECT `Product`.`id`, `Product`.`category_id`, `Product`.`name`, `Product`.`price`, `Product`.`description`, `ProductListsProduct`.`product_list_id`, `ProductListsProduct`.`product_id` FROM `database`.`products` AS `Product` JOIN `database`.`product_lists_products` AS `ProductListsProduct` ON (`ProductListsProduct`.`product_list_id` = 3 AND `ProductListsProduct`.`product_id` = `Product`.`id`)
4

1 回答 1

0

编辑:

有很多不同的方法可以解决这个问题;从用户的产品列表中获取随机产品。您可以使用 PHP 来完成 - 只需找到所有产品,然后使用rand()从返回的数组中挑选。您可以设置模型查询条件。名单还在继续……

我可能会为 ProductList 中的 Product 模型创建一个别名,称为 RandomProduct。您可以在设置关系时为检索到的产品设置查询:

public $hasMany = array(
    'RandomProduct' => array(
        'className'     => 'Product',
        'foreignKey'    => 'product_list_id',
        'order'         => 'Rand()',
        'limit'         => '1',
        'dependent'     => true
    )
);

然后,您可以使用可包含行为,以便仅在需要时检索此模型。(如果recursive发现值大于 -1,则不需要这样做,但我通常将其作为最佳实践,以便我的模型只查询他们需要的数据。)以下将返回任何名为“我们爱”的 ProductList以及与该列表关联的“随机”产品。

$mydata = $this->ProductList->find(
    'all', 
    array(
        'conditions' => array(
            'name' => 'we love'
            )
        ),
        'contain' => array(
            'RandomProduct'
        )
    );
于 2012-12-27T01:45:27.420 回答