0

こんにちは、私のニュース Web サイトでポートフォリオのギャラリーを作成していますが、マイナーな不具合があります。重複しないように個別のギャラリーを選択しようとしています。これはこれまでのコードです

function viewgalleries() {

    $viewgalleries = $this->Gallery->find('all', array(
        'fields' => 'DISTINCT Gallery.gallery_name'));
    if (!empty($this->request->params['requested'])) {
return $viewgalleries; }
    $this->set('gallery', $viewgalleries); 

}

そしてこれが私の見解です..

     <?php $viewgalleries = $this->requestAction('/Galleries/viewgalleries');?>

    <div class="allgalleries">

 <table class="galleries">
<?php foreach ($viewgalleries as $galleries): ?>
    <tr>
       <td>
         <span class="gallerylink">
            <?php echo $this->Html->link($galleries['Gallery']['gallery_name'], 
                  array('controller' => 'Gallery', 'action' => 'view', 
                  $galleries['Gallery']['id'])); ?>
         </span>
       </td>
    </tr>
  <?php endforeach; ?>
  </table>
    </div>

これは私が欲しいのですが、テーブルの id フィールドを選択していないので、このエラーがスローされます...

  Notice (8): Undefined index: id [APP/View/Galleries/viewgalleries.ctp, line 10]

その下にギャラリーの名前が表示されますが、チャンピオンズ リーグ ファイナル 2012

データベースからIDを選択する方法についてのアイデアはありますか??

事前に感謝するか、何か助けてください。

4

3 に答える 3

0

次のように検索で fields 引数キーを変更してみてください。

'fields' => array('DISTINCT Gallery.gallery_name, Gallery.id')

これはあなたのために働くでしょう。うまくいかなかった場合は、お気軽にお問い合わせください。

于 2012-07-16T05:34:07.790 に答える
0

非常にトリッキーであることが判明したため、個別の選択機能を使用する代わりに、同じギャラリー名を渡すことができるようにするために isUnique などの検証手法を追加してギャラリーを再フォーマットすることにしました。これはモデル/ギャラリーで達成されました.php に次のステートメントを追加します。

public $validate = array(
    'gallery_name' => array(
        'rule' => 'isUnique',
        'message' => 'This gallery already exists.'));

これが他の人に役立つことを願っています。

于 2012-08-08T14:09:58.200 に答える
0

fields次のように検索のキーを変更してみてください。

'fields' => array('DISTINCT Gallery.gallery_name', 'Gallery.id')

また、試すことができます:

$this->ModelName->query('SELECT 
                 DISTINCT Gallery.gallery_name,
                 Gallery.id 
                 FROM kickoff.galleries
                 AS Gallery WHERE 1 = 1');

また、問題を解決できる別の回避策があります。次のようなクエリ構成は、SELECT DISTINCT と同じ結果セットを生成します。

select * from TABLE group by FIELDNAME having count(FIELDNAME)>=1;

したがって、あなたの場合は次のようになります。

   SELECT Gallery.id, Gallery.gallery_name
   FROM kickoff.galleries 
   GROUP BY Gallery.gallery_name 
   HAVING COUNT(Gallery.gallery_name)=>1

ただし、COUNT() は NULL 値をカウントしないことに注意してください。そのため、NULL 値を持つフィールドで値をカウントしている場合、その行は COUNT() によってカウントされません。ここでの最良のオプションは、テーブル宣言に「NOT NULL」を含めることです。

于 2012-07-14T18:49:59.790 に答える