【问题标题】:cakePHP containable model should not be emptycakePHP 可包含模型不应为空
【发布时间】:2012-02-03 01:40:47
【问题描述】:

我在过滤记录时遇到问题,我不希望任何记录有空模型。

       $this->paginate = array('fields' =>
            array('DISTINCT Joborder.id',
                'Joborder.job_type',
                'Joborder.payment_status',
                'Joborder.estimate_id',
                'Joborder.quantity',
                'Joborder.date_created'
            ),
            'contain' => array(
                'Workorder.id',
                'Workorder.joborder_id',
                'Joborderpart.id',
                'Joborderpart.binding',
                'Orderstatus.id',
                'Estimate' => array(
                    'Client' => array(
                        'fields' => array(
                            'Client.company_name'
                        )
                    )
                ),
                'Orderstatus' => array(
                    'fields' => array('Orderstatus.id'),
                    'order' => array(
                        'Orderstatus.id DESC'
                    ),
                    'conditions' => array(
                        'Orderstatus.Orderstatustype_id LIKE' => 5
                    ),
                    'Orderstatustype' => array(
                        'fields' => array(
                            'Orderstatustype.id',
                            'Orderstatustype.orderstatus'
                        )
                    ),
                    'limit' => 1
                )
            )
        );

我在 Orderstatus 表中检查了一个条件,用于选择已发货的 orderstatustype_id LIKE 5。

我只需要运输记录,但它会提取所有记录,如下所示

Array
(
    [0] => Array
        (
            [Joborder] => Array
                (
                    [id] => 1
                    [job_type] => postcard
                    [payment_status] => Billed
                    [estimate_id] => 4
                    [quantity] => 
                    [date_created] => 2011-12-12
                )

            [Estimate] => Array
                (
                    [id] => 4
                    [client_id] => 4
                    [custom_estimate] => 0
                    [custom_description] => 
                    [clientuser_id] => 40
                    [admin_id] => 3
                    [date_created] => 2012-01-01
                    [time_created] => 06:27:26 AM
                    [pricing_details] => 0
                    [wastesheet] => 12
                    [job_type] => postcard
                    [client_percentage] => 
                    [tax_rate] => 0.00
                    [Client] => Array
                        (
                            [company_name] => erte
                        )

                )

            [Workorder] => Array
                (
                    [id] => 1
                    [joborder_id] => 1
                )

            [Joborderpart] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [binding] => None
                            [joborder_id] => 1
                        )

                )

            [Orderstatus] => Array
                (
                )

        )

    [1] => Array
        (
            [Joborder] => Array
                (
                    [id] => 2
                    [job_type] => asdf
                    [payment_status] => 
                    [estimate_id] => 5
                    [quantity] => 
                    [date_created] => 2011-10-12
                )

            [Estimate] => Array
                (
                    [id] => 5
                    [client_id] => 4
                    [custom_estimate] => 0
                    [custom_description] => 
                    [clientuser_id] => 40
                    [admin_id] => 3
                    [date_created] => 2012-01-02
                    [time_created] => 06:29:03 AM
                    [pricing_details] => 0
                    [wastesheet] => 12
                    [job_type] => asdf
                    [client_percentage] => 
                    [tax_rate] => 0.00
                    [Client] => Array
                        (
                            [company_name] => erte
                        )

                )

            [Workorder] => Array
                (
                    [id] => 2
                    [joborder_id] => 2
                )

            [Joborderpart] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [binding] => None
                            [joborder_id] => 2
                        )

                    [1] => Array
                        (
                            [id] => 3
                            [binding] => None
                            [joborder_id] => 2
                        )

                )

            [Orderstatus] => Array
                (
                    [0] => Array
                        (
                            [id] => 13
                            [orderstatustype_id] => 5
                            [joborder_id] => 2
                            [Orderstatustype] => Array
                                (
                                    [id] => 5
                                    [orderstatus] => Shipped
                                )

                        )

                )

        )

    [2] => Array
        (
            [Joborder] => Array
                (
                    [id] => 3
                    [job_type] => postcard
                    [payment_status] => 
                    [estimate_id] => 6
                    [quantity] => 
                    [date_created] => 2012-01-01
                )

            [Estimate] => Array
                (
                    [id] => 6
                    [client_id] => 4
                    [custom_estimate] => 0
                    [custom_description] => 
                    [clientuser_id] => 40
                    [admin_id] => 3
                    [date_created] => 2012-01-03
                    [time_created] => 06:30:30 AM
                    [pricing_details] => 1
                    [wastesheet] => 12
                    [job_type] => postcard
                    [client_percentage] => 
                    [tax_rate] => 0.00
                    [Client] => Array
                        (
                            [company_name] => erte
                        )

                )

            [Workorder] => Array
                (
                    [id] => 3
                    [joborder_id] => 3
                )

            [Joborderpart] => Array
                (
                    [0] => Array
                        (
                            [id] => 4
                            [binding] => None
                            [joborder_id] => 3
                        )

                    [1] => Array
                        (
                            [id] => 5
                            [binding] => None
                            [joborder_id] => 3
                        )

                )

            [Orderstatus] => Array
                (
                )

        )

)

我只需要过滤发货记录..请帮帮我..

【问题讨论】:

  • 嗨,sudhir,我已经详细更新了我的问题..

标签: cakephp pagination containable


【解决方案1】:

这是 Containable 的预期行为。当给定模型没有记录时,返回一个空数组。

摆脱它们的唯一方法是循环遍历结果数组并过滤掉空子元素。 This article 提出了一个涉及afterFind() 的解决方案。

【讨论】:

  • 感谢您的回复。我怀疑 aftefind() 是否支持分页选项,因为如果我在 afterfind 函数中删除不需要的记录,那么它将如何计算下一页的下 10 条记录?
  • 与空模型数组一起使用时是否可包含中断分页仍然存在于查找数据中?
  • 这是?因为如果不是,我会忽略空模型数组。
  • 分页和可包含正常工作,除了不需要的记录但发现包含破坏分页。
  • 奇怪的、可包含的和分页应该一起工作。您的问题可能需要另一个问题。
【解决方案2】:

可以通过包含连接以及包含和检查空值来从分页中删除空包含结果。

例如:-

$this->paginate = array(
    'fields' => array(
        'DISTINCT Order.id',
        'Order.*'
    ),
    'conditions' => array(
        'OrderItem.id IS NOT NULL'
    ),
    'joins' => array(
        array(
            'table' => 'order_items',
            'alias' => 'OrderItem',
            'type' => 'LEFT',
            'conditions' => array('Order.id = OrderItem.order_id')
        )
    ),
    'contain' => array(
        'OrderItem'
    )
)

这将确保只退回带有订单商品的订单。

【讨论】:

    猜你喜欢
    • 2012-10-23
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    相关资源
    最近更新 更多