CakePHP – 构建复杂查询

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了CakePHP – 构建复杂查询脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我想使用Cake PHP构建以下查询.我该怎么办呢?

SELECT
            `Artist`.`id`,CONCAT_WS(' ',`PErson`.`First_name`,`Person`.`last_name`,`Person`.`post_nominal_letters`) AS `name`,`Portfolio`.`count`
        From
            `people` as `Person`,`artists` as `Artist`
        LEFT OUTER JOIN
            (SELECT
                `PRoduct`.`artist_id`,COUNT(DISTINCT `Product`.`id`) AS `count`
            From
                `product_availabilITies` AS `ProductAvailability`,`products` AS `Product`
            LEFT OUTER JOIN
                `order_details` AS `OrderDetail`
            ON
                `Product`.`id` = `OrderDetail`.`product_id`
            LEFT OUTER JOIN
                `orders` AS `Order`
            ON
                `Order`.`id` = `OrderDetail`.`order_id`
            WHERE
                `ProductAvailability`.`id` = `Product`.`product_availability_id`
            AND
                `Product`.`online` = true
            AND
                (`ProductAvailability`.`name` = 'For sale')
                OR
                    ((`ProductAvailability`.`name` = 'Sold') AND (DATEDIFF(Now(),`Order`.`order_date`) <= 30))
            group by
                `Product`.`artist_id`)
        AS
            `Portfolio`
        ON
            `Artist`.`id` = `Portfolio`.`artist_id`
        WHERE
            `Artist`.`person_id` = `Person`.`id`
        AND
            `Artist`.`online` = true
        GROUP BY
            `Artist`.`id`
        ORDER BY
            `Person`.`last_name`,`Person`.`first_name`;

解决方法

我认为该模型是Artist并且它与belongsTo有关系,那么你可以用这种方式使用CakePHP ORM并且hasmany with Portfolio

首先,你要破坏艺家和投资组合之间的关系

$这 – > Artist-> unbindModel(阵列( ‘的hasMany’=>阵列( ‘组合’)));

然后建立关系

$this->Artist->bindModel(array('hasOne'=>array('Portfolio')));

最后,您必须创建其他关系

$this->Artist->bindModel(array(
'belongsTo'=>array(
'Product'=>array(
 'clasName'=>'Product','foreignKey'=> false,'conditions'=>'Product.id = Artist.product_id'
 ),'ProductAvaibility'=>array(
 'clasName'=>'ProductAvaibility','conditions'=>'ProductAvaibility.id = Product.product_avaibility_id'
 ),'OrderDetail'=>array(
 'clasName'=>'OrderDetail','conditions'=>'Product.id = OrderDetail.product_id'
 ),'Order'=>array(
 'clasName'=>'Order','conditions'=>'Order.id = OrderDetail.order_id'
 ),)
));

现在,当关系完成后,你可以找到你的发现

$this->Artist->find('all',array(
'conditions'=>array(
'Artist.online'=>true
),'group'=>array(
'Artist.id'
),'order'=>array(
'Person.last_name','Person.first_name',)
))

我希望它对你有用

脚本宝典总结

以上是脚本宝典为你收集整理的CakePHP – 构建复杂查询全部内容,希望文章能够帮你解决CakePHP – 构建复杂查询所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。