【问题标题】:bindModel not working on Paginator conditions [CakePHP]bindModel 在分页器条件下不起作用 [CakePHP]
【发布时间】:2015-08-26 04:11:33
【问题描述】:

我想知道您是否可以帮助我解决我一段时间以来遇到的问题。 首先,让我解释一下。我有 3 个表:付款、销售和客户。 每个销售都有它的 customer_id 字段 (FK),每个付款都有它的 sale_id。所以我想在 Payments 视图中访问客户名称,为此我为销售模型创建了一个 bindModel,如下所示:

    $this->Payment->bindModel(
       array(
         'belongsTo'=>array(
             'Sale'=>array(
             'className'  =>  'Sale',
             'foreignKey' => 'sale_id',                
           )          
       )
    ), false
);

并将递归参数设置为两个:

$this->Payment->recursive = 2;

当我向分页器添加一个条件时,问题就来了,因为它不尊重递归参数,它没有与表客户建立关系,它只与表销售建立关系。这就是我声明分页器的方式:

public $paginate = array(
'limit' => 100,             
);

这就是我设置分页器条件的方式:

$this->Paginator->settings = $this->paginate;   

    $conditions = array();
    if(!empty($customerName)){                  
        $searchTerm = '%' . $customerName. '%';
        $conditions[] = array( "AND" => array ("Customer.name LIKE" => $searchTerm ) );
    }

$this->Paginator->settings['conditions']['AND'] = $conditions;  

然后它向我显示以下错误:

数据库错误

错误:SQLSTATE[42S22]:找不到列:1054 未知列 'where 子句'中的'Customer.name'

有人知道发生了什么吗?,我将不胜感激任何帮助。提前致谢。

编辑:

支付模式:

    var $belongsTo = array(
    'Sale' => array(
    'type' => 'LEFT'    
    )
); 

销售模式

     var $belongsTo = array(
                    'Product' => array(
                    'type' => 'INNER',
                    'fields' => array('Product.id, Product.name, Product.multiple')
                    ),
                    'Customer' => array(
                    'type' => 'INNER',
                    'fields' => array('Customer.name, Customer.rfc'),
                    ) 
                 ); 

【问题讨论】:

  • 我猜没人有答案:(

标签: cakephp


【解决方案1】:

我找到了解决方案,在这里,以防万一有人需要它:

我这样设置分页:

$this->paginate['Payment'] = array(
'contain'=>array(
    'Sale'=>array(
        'Customer'
    )
),
'joins'=>array(
    array(
        'table'=>'customers',
        'alias'=>'Customer',
        'type'=>'INNER',
        'conditions'=>array(
            'Customer.id = Sale.customer_id',                             
        )
    )
)

);

这样的条件:

$this->paginate['Payment']['conditions']['AND'] = $conditions;  

最后:

$this->Paginator->settings = $this->paginate;

我希望它会有用。谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 2011-09-27
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多