在分页SQL错误(SQL error on pagination)

2019-07-31 16:05发布

嘿,伙计们,我们有一个完美的工作网页(index_admin)的关系控制器,但添加分页毕竟其崩溃。

想出:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Relationship.sender_id' in 'where clause'

客户和企业建立的“关系”,使他们可以在我们的网站交换发票。 下面是DB模式:

ID,SENDER_ID,receiver_id,活动,要求,EXPIRY_DATE

SENDER_ID和receiver_id都是外键的帐户表。 因此,换句话说,告诉其账户相互关联的数据库。

关系模型“属于关联“接收器和发送Account模型”:

public $belongsTo = array(
        'ReceiverAccount' =>array(
            'className' => 'Account',
            'foreignKey' =>'receiver_id',
            'associationForeignKey'  => 'accounts_id',
            ),
        'SenderAccount' =>array(
            'className' => 'Account',
            'foreignKey' =>'sender_id',
            'associationForeignKey'  => 'accounts_id',)
            ); 

Index_admin:

public function index_admin(){
        $this->set('title_for_layout', 'Relationships');
        $this->set('stylesheet_used', 'homestyle');
        $this->set('image_used', 'eBOXLogoHome.png');   
        $this->layout='home_layout';

        //retrieve Account Id of current User       
        $accountid=$this->Auth->user('account_id');

        //Conditions
        $conditions=array(
        "OR"=> array(
            'Relationship.sender_id' => $accountid,
            'Relationship.receiver_id' => $accountid)
        );



        //Find all Invoices where receiver_id = accountid
        $relationships=$this->Relationship->find('all', array(
        'conditions' => $conditions));

        debug($conditions);

        $compName = $this->Account->field('account_name', array('id' => 'Relationship.id'));

        $this->paginate = array(
        'limit' => 10,
        'conditions'=> $conditions
        );

        $this->set('accountid', $accountid); 
        $this->set('relationship', $this->paginate());  

        $this->set('compName', $compName);  
    }

Index_admin图(局部):

<table id="data">
                <tr>
                        <td colspan=7 align='right'>
                        <?php 
                        echo $this->Paginator->prev('<' . __('previous'), array(), null, array('class'=>'prev disabled'));  
                        echo '&nbsp;';
                        echo $this->Paginator->numbers(array('seperator'=>'')); 
                        echo '&nbsp;';
                        echo $this->Paginator->next(__('next') . '>', array(), null, array('class'=>'next disabled'));
                        ?>
                        </td>
                </tr>
                <tr>
                    <th><?php echo $this->Paginator->sort('id'); ?></th>
                    <th><?php echo $this->Paginator->sort('sender_id'); ?></th>
                    <th><?php echo $this->Paginator->sort('receiver_id'); ?></th>
                    <th><?php echo $this->Paginator->sort('expiry_date'); ?></th>
                    <th>Status</th>
                    <th>Actions</th>
                </tr>

        <?php foreach($relationship as $relationships):?>

        <?php

        if($relationships['Relationship']['requested']==1)
        {
            $status = 'Requested';
            $bgcol = '#F8FAC0';
        }
        else if($relationships['Relationship']['active']==1)
        {
            $status = 'Active';
            $bgcol = '#CFDAE8';
        }
        else if($relationships['Relationship']['active']==0)
        {
            $status = 'Expired';
            $bgcol = '#FAB9B9';
        }       

        if($relationships['Relationship']['active']==0 && $relationships['Relationship']['requested']==0)
        {
            $action = 'Reactivate';
        }
        else
        {
            $action = 'Edit Expiry';
        }

        if($relationships['Relationship']['sender_id']==$accountid)
        {
            $start = '<font color="#191970">';
            $end = '</font>';
        }
        else
        {
            $start = NULL;
            $end = NULL;
        }

        if($relationships['Relationship']['receiver_id']==$accountid)
        {
            $startr = '<font color="#191970">';
            $endr = '</font>';
        }
        else
        {
            $startr = NULL;
            $endr = NULL;
        }


        if($relationships['Relationship']['sender_id']==$accountid)
        {
            $acctname = $relationships['ReceiverAccount']['account_name'];
        }
        else if($relationships['Relationship']['receiver_id']==$accountid)
        {
            $acctname = $relationships['SenderAccount']['account_name'];
        }

?>

                    <tr>
                        <td align='center'><?php echo $relationships['Relationship']['id']; ?></td>
                        <td align='center'><?php echo $start?><?php echo $relationships['SenderAccount']['account_name']; ?><?php echo $end ?></td>
                        <td align='center'><?php echo $startr?><?php echo $relationships['ReceiverAccount']['account_name']; ?><?php echo $endr ?></td>
                        <td align='center'><?php echo date('d.m.Y', strtotime($relationships['Relationship']['expiry_date'])); ?></td>
                        <td align='center' bgcolor='<?php echo $bgcol ?>'><?php echo $status ?></td>
                        <td align='center'> 
                        <?php echo $this->Form->Html->link('Delete', array('controller' => 'Relationships','action'=>'delete',$relationships['Relationship']['id']), NULL, 'Are you sure you want to delete '. $acctname);
                         ?> | <?php echo $action ?> </td>
                    </tr>
                <?php endforeach; ?>

            <tr>
                        <td colspan=7 align='right'>
                        <?php 
                        echo $this->Paginator->prev('<' . __('previous'), array(), null, array('class'=>'prev disabled'));  
                        echo '&nbsp;';
                        echo $this->Paginator->numbers(array('seperator'=>'')); 
                        echo '&nbsp;';
                        echo $this->Paginator->next(__('next') . '>', array(), null, array('class'=>'next disabled'));
                        ?>
                        </td>
            </tr>
            </table>

就像我说,这是前手所有工作,现在还不是,但我不明白为什么。

Answer 1:

它始终是明智的,在设置调试模式,详细查看所有可能的错误。 您刚刚共享SQL错误部分从中清楚,表意不具备“SENDER_ID”字段 。 我假设你已经在调试模式。 所以首先看看生成的查询。 然后你会发现查询试图挖掘该表。

如果您的查询引用正确的表,你可以试试这个:

public function index_admin(){
        $this->set('title_for_layout', 'Relationships');
        $this->set('stylesheet_used', 'homestyle');
        $this->set('image_used', 'eBOXLogoHome.png');   
        $this->layout='home_layout';

        //retrieve Account Id of current User       
        $accountid=$this->Auth->user('account_id');

        //Conditions
        $conditions=array(
        "OR"=> array(
            'Relationship.sender_id' => $accountid,
            'Relationship.receiver_id' => $accountid)
        );
        App::import('Model', 'Relationship');
        $objRelationship = new Relationship();
        $this->paginate = array( "conditions" => $conditions, 'limit' => 10 );
        $relationships = $this->paginate( $objRelationship );

        $compName = $this->Account->field('account_name', array('id' => 'Relationship.id'));

        $this->set('accountid', $accountid); 
        $this->set('relationship', $this->paginate());  
        $this->set('compName', $compName);
}


文章来源: SQL error on pagination