CakePHP find возвращает null
привет всем я пытаюсь сделать две вещи найти, типовые споры принадлежат накладным.
найти все счета, где
invoice.receiver_id=account.id
и
dispute.invoice_id=invoice.id
в настоящее время массив возвращает null при отладке. В инструкции find должно быть 2 результата
вот код в моем контроллере споров
public function index_admin(){
$id = $this->Auth->User('account_id');
$receiver = $this->Invoice->find('all',array(
'conditions'=>array("AND"=>array(
'Invoice.id'=>'Dispute.invoice_id',
'receiver_id'=>$id))));
$this->set('id',$id);
$this->set('receiver', $receiver);
}
это в контроллере споров, так как я хочу распечатать список о накладные споров.
Query Error Affected Num. rows Took (ms)
1 SELECT `Invoice`.`id`, `Invoice`.`scheduled`, `Invoice`.`paid`, `Invoice`.`sender_id`, `Invoice`.`receiver_id`, `Invoice`.`template_id`, `Invoice`.`created`, `Invoice`.`expiry_date`, `Invoice`.`total_amount`, `ReceiverAccount`.`id`, `ReceiverAccount`.`street`, `ReceiverAccount`.`city`, `ReceiverAccount`.`postcode`, `ReceiverAccount`.`state`, `ReceiverAccount`.`country`, `ReceiverAccount`.`active`, `ReceiverAccount`.`account_name`, `ReceiverAccount`.`abn`, `SenderAccount`.`id`, `SenderAccount`.`street`, `SenderAccount`.`city`, `SenderAccount`.`postcode`, `SenderAccount`.`state`, `SenderAccount`.`country`, `SenderAccount`.`active`, `SenderAccount`.`account_name`, `SenderAccount`.`abn`, `Template`.`id`, `Template`.`name`, `Template`.`description`, `Template`.`account_id`, `Template`.`active` FROM `pra`.`invoices` AS `Invoice` LEFT JOIN `pra`.`accounts` AS `ReceiverAccount` ON (`Invoice`.`receiver_id` = `ReceiverAccount`.`id`) LEFT JOIN `pra`.`accounts` AS `SenderAccount` ON (`Invoice`.`sender_id` = `SenderAccount`.`id`) LEFT JOIN `pra`.`templates` AS `Template` ON (`Invoice`.`template_id` = `Template`.`id`) WHERE `Invoice`.`id` = 'Dispute.invoice_id' AND `Invoice`.`receiver_id` = 2
изменить ---------------------
invoices tables has - id, sender_id, receiver_id, amount, expiry_date, created, paid
disputes table has - id, dispute_date, comment, active
модель споров выглядит так
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',
)
);
споры имеет один отправитель и один получатель, поскольку один счет-фактура может иметь только один спор.
2 ответов
попробуйте этот код, если вы находитесь в DisputeController: Я не знаю, является ли имя таблицы invoices
$id = $this->Auth->User('account_id');
$options['joins'] = array(
array(
'table' => 'invoices',
'alias' => 'i',
'type' => 'INNER',
'conditions' => array(
'i.id' => 'invoice_id',
'i.receiver_id' => $id
)
));
$receiver = $this->Dispute->find('all', $options);
$this->set('id',$id);
$this->set('receiver', $receiver);
public function index_admin(){
$id = $this->Auth->User('account_id');
$this->Invoice->bindModel(array('hasMany'=>array('Dispute' => array ('className' => 'Dispute','foreignKey' => 'invoice_id'))));
$receiver = $this->Invoice->find('all',array('conditions'=>array('Invoice.receiver_id'=>$id)));
$this->set('id',$id);
$this->set('receiver', $receiver);
}
============ Обновленный Ответ ================
public function index_admin(){
$id = $this->Auth->User('account_id');
$this->Invoice->bindModel(array('hasMany'=>array('Dispute' => array ('className' => 'Dispute','foreignKey' => 'invoice_id','conditions'=>array('receiver_id'=>$id)))));
$receiver = $this->Invoice->find('all');
$this->set('id',$id);
$this->set('receiver', $receiver);
}
попробуйте мой обновленный ответ и дайте мне знать