1

私のデータベース

学生テーブル

ID    NAME     PARENT_ID (VARCHAR)
1     JOHN     NULL
2     MATT     NULL
3     PETER    1,2

テーブルの一覧に表示

ID    NAME     MENTOR NAME
1     JOHN     NULL
2     MATT     NULL
3     PETER    JOHN, MATT

for each ループを作成してテーブルにデータのリストを表示するときに、"1,2" ではなく "John と Matt" を表示するにはどうすればよいですか?

メンター名を表示するために、 $belongTo 内の Student クラスに StudentExtra を作成しました。ただし、この方法ではメンター名が 1 つしか表示されません。

モデル

class Student extends AppModel
{
// Mainly for PHP4 users
var $name = 'Student';
var $hasMany = array('Order','Test'); 

var $belongsTo = array
(
'StudentExtra'=>array
(
   'className'  => 'Student',
   'foreignKey' => 'parent_id'
),'School','Classroom'
);

コントローラ

    $this->paginate = array(
            'limit' => 10,
        'order' => array('Student.name' => 'ASC'));

    $this->set('students', $this->paginate('Student'));

見る

<table>
<?php foreach ($students as $student){ ?>
<tr> 
<td>
<?php $student['Student']['id'] ?>
</td>
</tr>
<tr> 
<td>
<?php $student['Student']['name'] ?>
</td>
</tr>
<tr> 
<td>
<?php $student['Student']['parent_id'] ?>
</td>
</tr>
<?php } ?>
</table>

結果

 Array
 (
  [0] => Array
    (
        [Student] => Array
            (
                [id] => 1190
                [customers_gender] => M
                [resumetest] => 
                [created] => 2013-04-01 19:29:08
                [modified] => 2013-04-01 19:29:08
                [customers_name] => aaa aaa
                [customers_dob] => 1970-01-01
                [customers_roles] => student
                [customers_types] => student
                [customers_parent_id] => 1055,1056
                [school_id] => 40
                [classroom_id] => 96
            )

        [StudentExtra] => Array
            (
                [id] => 1055
                [customers_gender] => F
                [created] => 2013-03-28 11:14:25
                [modified] => 2013-03-28 11:14:25
                [customers_name] => Mich
                [customers_dob] => 1970-01-01
                [customers_roles] => teacher
                [customers_types] => teacher
                [customers_parent_id] => 
                [school_id] => 40
                [classroom_id] => 96
            )

        [School] => Array
            (
                [id] => 40
                [name] => Primary School
                [description] => 
                [created] => 2013-03-28 10:47:05
                [modified] => 2013-03-28 10:47:05
            )

        [Classroom] => Array
            (
                [id] => 96
                [name] => 30G
                [year_level] => 3
                [description] => 
                [created] => 2013-03-28 10:58:25
                [modified] => 2013-03-28 10:58:25
                [school_id] => 40
            )

        [Order] => Array
            (
            )

        [Test] => Array
            (
            )

    )
4

2 に答える 2

2

その他の Cakephp の方法は以下の通りです。

以下のようにStudent モデルへの関連付けを設定することもできます。

学生モデルに以下のコードを追加

var $belongsTo = array
(
    'StudentExtra'=>array
    (
       'className'  => 'Student',
       'foreignKey' => 'parent_id'
    )
);

コントローラ内

$this->set('students', $this->paginate('Student'));

pr($students); exit();ビュー内またはコントローラー関数の最後で結果をテストするだけです。

StudentExtra に余分に追加されたレコード配列が表示されますが、これで十分です。

ビューファイルでは、以下のように表示されます。

<table>
    <?php foreach ($students as $student){ ?>
    <tr> 
        <td>
            <?php $student['Student']['id'] ?>
        </td>
    </tr>
    <tr> 
        <td>
            <?php $student['Student']['name'] ?>
        </td>
    </tr>
    <tr> 
        <td>
            <?php $student['StudentExtra']['name'] ?>
        </td>
    </tr>
    <?php } ?>
</table>

回答更新応答コード

$this->paginate = array
(
    'joins'=>array
    (
        array
        (
            'table'=>'students',
            'alias'=>'StudentExtra',
            'type' =>'inner',
            'conditions' =>array('StudentExtra.id IN (Student.parent_id)')
        )
    ),
    'limit'=> 10,
    'order' => array('Student.name' => 'ASC')
);

$this->set('students', $this->paginate('Student'));
debug($this->paginate('Student'));
exit;
于 2013-01-23T04:27:58.797 に答える
1

学生モデルを作成します。

class Students extends AppModel {

    public $useTable = false;

    public function getParentName($id) {
        $id = (int) $id;
        $sql = "
            SELECT NAME FROM `students` WHERE ID = (
                SELECT PARENT_ID FROM `students` WHERE ID = $id
            )
        ");
        return $this->query($sql);
    }

}

次に、コントローラーで:

$this->Students->getParentName(2); // in this case for Peter
于 2013-01-23T01:26:29.383 に答える