bindModel无法处理Paginator条件[CakePHP]

时间:2015-08-24 15:16:34

标签: cakephp

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

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

并将递归参数设置为2:

$this->Payment->recursive = 2;

当我向Paginator添加一个条件时出现问题,因为它不尊重递归参数,它不会使表与客户的关系,它只使它到表Sales。这就是我声明分页符的方式:

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'),
                    ) 
                 ); 

1 个答案:

答案 0 :(得分:0)

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

我像这样设置了分页:

$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;

我希望它会有用。感谢。