Cakephp2.0检索数据find()

时间:2012-09-19 10:55:40

标签: sql cakephp

我有一个发现错误的find参数,debugkit说的是未知列,现在看表时我可以看到它。

invoices个表格 - id, sender_id, receiver_id, total_amount, expiry_date

还有一个disputes表,其中包含 - id, invoice_id, active, dispute_date

这是来自争议模型

public $belongsTo = array(
    'Invoice' => array(
            'className' => 'Invoice',
            'foreignKey' => 'invoice_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
            )
        );

    public $hasOne = array(
        'Sender' => array(
            'className' => 'Account',
            'foreignKey' =>'sender_id',
            'associationForeignKey'  => 'accounts_id',),
        'Receiver'=> array(
            'className' => 'Account',
            'foreignKey' =>'receiver_id',
            'associationForeignKey'  => 'accounts_id',
            )
            );

这个发现在disputeController中

$id = $this->Auth->User('account_id');

    $conditions=array('Invoice.receiver_id' => $id,
    'Dispute.invoice_id'=>'Invoice.id');

    $receiver = $this->Invoice->find('all', array(
    'conditions'=>$conditions));

    debug($receiver);


    $this->set('id', $id);
    $this->set('conditions', $conditions);
    $this->set('receiver', $receiver);

目前正在$conditions中说Column not found: 1054 Unknown column 'Dispute.invoice_id' in 'where clause'

如果我从$conditions删除它,则find会在调试时检索以下内容。

array(
    (int) 0 => array(
        'Invoice' => array(
            'id' => '5',
            'scheduled' => true,
            'paid' => false,
            'sender_id' => '3',
            'receiver_id' => '2',
            'template_id' => '3',
            'created' => '2012-02-06 00:00:00',
            'expiry_date' => '0000-00-00',
            'total_amount' => '0'
        ),
        'ReceiverAccount' => array(
            'id' => '2',
            'street' => '50 Simmington Circuit',
            'city' => 'Greenvale',
            'postcode' => '3059',
            'state' => 'VIC',
            'country' => 'Australia',
            'active' => true,
            'account_name' => 'Kialla Transport (Operations) Pty Ltd',
            'abn' => '2147483647'
        ),
        'SenderAccount' => array(
            'id' => '3',
            'street' => '31 Simmington Circuit',
            'city' => 'Greenvale',
            'postcode' => '3059',
            'state' => 'VIC',
            'country' => 'Australia',
            'active' => true,
            'account_name' => 'MGD Kialla Pty Ltd',
            'abn' => '2147483647'
        ),
        'Template' => array(
            'id' => '3',
            'name' => 'MGDKiallaConsulting',
            'description' => 'The invoice template for MGD Kialla Pty Ltd Consulting Fees',
            'account_id' => '3',
            'active' => true
        ),
        'FieldsInvoice' => array(),
        'Dispute' => array(
            (int) 0 => array(
                'id' => '5',
                'dispute_date' => '2012-03-01',
                'comment' => 'Amount on invoice is not the same as amount discussed',
                'active' => false,
                'invoice_id' => '5'
            )
        )
    ),
    (int) 1 => array(
        'Invoice' => array(
            'id' => '16',
            'scheduled' => false,
            'paid' => false,
            'sender_id' => '1',
            'receiver_id' => '2',
            'template_id' => '0',
            'created' => '2012-06-20 00:00:00',
            'expiry_date' => '0000-00-00',
            'total_amount' => '0'
        ),
        'ReceiverAccount' => array(
            'id' => '2',
            'street' => '50 Simmington Circuit',
            'city' => 'Greenvale',
            'postcode' => '3059',
            'state' => 'VIC',
            'country' => 'Australia',
            'active' => true,
            'account_name' => 'Kialla Transport (Operations) Pty Ltd',
            'abn' => '2147483647'
        ),
        'SenderAccount' => array(
            'id' => '1',
            'street' => '4 Ridley Court',
            'city' => 'Doncaster East',
            'postcode' => '3109',
            'state' => 'VIC',
            'country' => 'Australia',
            'active' => true,
            'account_name' => 'McDonalds',
            'abn' => '2147483647'
        ),
        'Template' => array(
            'id' => '0',
            'name' => 'SYSTEM',
            'description' => 'SYSTEM',
            'account_id' => '2',
            'active' => true
        ),
        'FieldsInvoice' => array(),
        'Dispute' => array(
            (int) 0 => array(
                'id' => '8',
                'dispute_date' => '2012-07-01',
                'comment' => 'Amount on invoice is not the same as amount discussed',
                'active' => true,
                'invoice_id' => '16'
            )
        )
    ),
    (int) 2 => array(
        'Invoice' => array(
            'id' => '18',
            'scheduled' => true,
            'paid' => false,
            'sender_id' => '3',
            'receiver_id' => '2',
            'template_id' => '0',
            'created' => '2012-06-25 00:00:00',
            'expiry_date' => '0000-00-00',
            'total_amount' => '0'
        ),
        'ReceiverAccount' => array(
            'id' => '2',
            'street' => '50 Simmington Circuit',
            'city' => 'Greenvale',
            'postcode' => '3059',
            'state' => 'VIC',
            'country' => 'Australia',
            'active' => true,
            'account_name' => 'Kialla Transport (Operations) Pty Ltd',
            'abn' => '2147483647'
        ),
        'SenderAccount' => array(
            'id' => '3',
            'street' => '31 Simmington Circuit',
            'city' => 'Greenvale',
            'postcode' => '3059',
            'state' => 'VIC',
            'country' => 'Australia',
            'active' => true,
            'account_name' => 'MGD Kialla Pty Ltd',
            'abn' => '2147483647'
        ),
        'Template' => array(
            'id' => '0',
            'name' => 'SYSTEM',
            'description' => 'SYSTEM',
            'account_id' => '2',
            'active' => true
        ),
        'FieldsInvoice' => array(),
        'Dispute' => array(
            (int) 0 => array(
                'id' => '10',
                'dispute_date' => '2012-07-01',
                'comment' => 'Amount on invoice is not the same as amount discussed',
                'active' => true,
                'invoice_id' => '18'
            )
        )
    ),
    (int) 3 => array(
        'Invoice' => array(
            'id' => '19',
            'scheduled' => true,
            'paid' => false,
            'sender_id' => '4',
            'receiver_id' => '2',
            'template_id' => '0',
            'created' => '2012-07-26 00:00:00',
            'expiry_date' => '0000-00-00',
            'total_amount' => '0'
        ),
        'ReceiverAccount' => array(
            'id' => '2',
            'street' => '50 Simmington Circuit',
            'city' => 'Greenvale',
            'postcode' => '3059',
            'state' => 'VIC',
            'country' => 'Australia',
            'active' => true,
            'account_name' => 'Kialla Transport (Operations) Pty Ltd',
            'abn' => '2147483647'
        ),
        'SenderAccount' => array(
            'id' => '4',
            'street' => '643 Somerton Road',
            'city' => 'Greenvale',
            'postcode' => '3059',
            'state' => 'VIC',
            'country' => 'Australia',
            'active' => true,
            'account_name' => 'Simmington Investments Pty Ltd',
            'abn' => '2147483647'
        ),
        'Template' => array(
            'id' => '0',
            'name' => 'SYSTEM',
            'description' => 'SYSTEM',
            'account_id' => '2',
            'active' => true
        ),
        'FieldsInvoice' => array(),
        'Dispute' => array()
    ),
    (int) 4 => array(
        'Invoice' => array(
            'id' => '20',
            'scheduled' => false,
            'paid' => false,
            'sender_id' => '5',
            'receiver_id' => '2',
            'template_id' => '0',
            'created' => '2012-07-28 00:00:00',
            'expiry_date' => '0000-00-00',
            'total_amount' => '0'
        ),
        'ReceiverAccount' => array(
            'id' => '2',
            'street' => '50 Simmington Circuit',
            'city' => 'Greenvale',
            'postcode' => '3059',
            'state' => 'VIC',
            'country' => 'Australia',
            'active' => true,
            'account_name' => 'Kialla Transport (Operations) Pty Ltd',
            'abn' => '2147483647'
        ),
        'SenderAccount' => array(
            'id' => '5',
            'street' => '2 Everingham Court',
            'city' => 'Greenvale',
            'postcode' => '3059',
            'state' => 'VIC',
            'country' => 'Australia',
            'active' => true,
            'account_name' => 'NG Technologies',
            'abn' => '2147483647'
        ),
        'Template' => array(
            'id' => '0',
            'name' => 'SYSTEM',
            'description' => 'SYSTEM',
            'account_id' => '2',
            'active' => true
        ),
        'FieldsInvoice' => array(),
        'Dispute' => array()
    ),
    (int) 5 => array(
        'Invoice' => array(
            'id' => '21',
            'scheduled' => false,
            'paid' => false,
            'sender_id' => '6',
            'receiver_id' => '2',
            'template_id' => '0',
            'created' => '2012-07-30 00:00:00',
            'expiry_date' => '2010-11-10',
            'total_amount' => '0'
        ),
        'ReceiverAccount' => array(
            'id' => '2',
            'street' => '50 Simmington Circuit',
            'city' => 'Greenvale',
            'postcode' => '3059',
            'state' => 'VIC',
            'country' => 'Australia',
            'active' => true,
            'account_name' => 'Kialla Transport (Operations) Pty Ltd',
            'abn' => '2147483647'
        ),
        'SenderAccount' => array(
            'id' => '6',
            'street' => '20 Ridley Court',
            'city' => 'Doncaster',
            'postcode' => '3109',
            'state' => 'VIC',
            'country' => 'Australia',
            'active' => true,
            'account_name' => 'KFC',
            'abn' => '2147483647'
        ),
        'Template' => array(
            'id' => '0',
            'name' => 'SYSTEM',
            'description' => 'SYSTEM',
            'account_id' => '2',
            'active' => true
        ),
        'FieldsInvoice' => array(),
        'Dispute' => array()
    )
)

我想要做的只是检索有发生争议信息的发票信息,例如dispute.invoice_id = invoice.id但是它会引发错误。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

尝试使用可包含的行为:

$this->Invoice->Behaviors->attach('Containable');

$this->Invoice->contain('Dispute' => array('conditions' => array('Dispute.invoice_id' => 'Invoice.id')));
$receiver = $this->Invoice->find('all', array('conditions' => array('Invoice.receiver_id' => $id)));

$this->Invoice->Behaviors->detach('Containable');

参考:

答案 1 :(得分:0)

您可以使用临时删除关联,这对您的方法检索数据无用

$ this-> User-> unbindModel(array(' belongsTo' => array(' Group'),' hasOne' =>数组(' UsersChicken')));

类型函数