2

こんにちは、リレーションシップ コントローラーの完全に機能する Web ページ (index_admin) がありますが、ページネーションを追加した後、すべてがクラッシュします。

といっしょに:

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

顧客と企業は「関係」を築き、当社の Web サイトで請求書を交換できます。DB スキーマは次のとおりです。

ID、sender_id、receiver_id、アクティブ、リクエスト済み、exp​​iry_date

Sender_id と receiver_id はどちらもアカウント テーブルへの外部キーです。つまり、どのアカウントが相互にリンクされているかをデータベースに伝えます。

関係モデル「BELONGSTO」「RECEIVER AND SENDER ACCOUNT MODELS」:

public $belongsTo = array(
        'ReceiverAccount' =>array(
            'className' => 'Account',
            'foreignKey' =>'receiver_id',
            'associationForeignKey'  => 'accounts_id',
            ),
        'SenderAccount' =>array(
            'className' => 'Account',
            'foreignKey' =>'sender_id',
            'associationForeignKey'  => 'accounts_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)
        );



        //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>

私が言ったように、それはすべて事前に機能していましたが、今はそうではありませんが、その理由はわかりません。

4

1 に答える 1

1

デバッグ モードをオンに設定して、考えられるすべてのエラーを詳細に確認することをお勧めします。意図したテーブルに「sender_id」フィールドがないことが明らかなSQLエラー部分を共有しました。デバッグモードがオンになっていると仮定しています。まず、生成されたクエリを見てください。次に、クエリが掘り下げようとしているテーブルを見つけます。

クエリが正しいテーブルを参照している場合は、これを試すことができます。

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);
}
于 2012-12-24T13:06:57.920 に答える