2012-07-14 5 views
0

Привет, я создаю галерею на своем новостном веб-сайте для моего портфолио, имеющего незначительный сбой. Я пытаюсь выбрать отдельную галерею, так что это не повторится, это код, который я до сих порCakePHP 2.1 Выберите поле «Отдельно», но по-прежнему выберите идентификатор в таблице SQL.

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> 

Это дает я хочу, я хочу, однако он не выбирает поле идентификатора в таблице поэтому его бросали мне эту ошибку ...

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

Ниже он показывает мне название галереи однако C hampions Финал Лиги 2012

Любые идеи относительно того, как я все еще мог выбрать идентификатор из базы данных?

Заранее благодарим за помощь или помощь.

ответ

0

Вместо того, чтобы использовать выделенную функцию, так как оказалось, что это довольно сложно, я решил переформатировать мою галерею, добавив методы валидации, такие как isUnique, чтобы позволить пропускать одно и то же имя галереи, это было достигнуто в the Models/Gallery.php:

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

Надеюсь, что это поможет другим.

0

Тry изменение ключа 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() не count NULL, поэтому, если вы подсчитываете значения по полю со значениями NULL, эти строки не будут подсчитываться с помощью COUNT(). Лучший вариант здесь - иметь «NOT NULL» в объявлении таблицы.

+0

Неа, не работает, я получаю эту ошибку Database Error 'Ошибка: SQLSTATE [42000]: Ошибка синтаксиса или нарушение прав доступа: 1064 У вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'DISTINCT 'Gallery'.' gallery_name' FROM' kickoff'.'galleries' AS 'Gallery' WHER 'в строке 1 SQL Query: SELECT' Галерея'''''', DISTINCT 'Gallery'.'gallery_name' FROM' kickoff'.'galleries' AS 'Gallery' WHERE 1 = 1' любые другие предложения[email protected] Sabev – 001221

+0

Gallery.id должен быть автоматически выбран в любом случае, но попробуйте: '' fields '=> array (' DISTINCT Gallery.gallery_name ',' Gallery.id ') '. Помогло ли это? Также мы работаем в предположении, что это MySQL здесь правильно? Я обновил свой ответ - попробуйте использовать 'Model :: query()', чтобы узнать, что произойдет. –

+0

Нет, ни одна из них не работает, ну, как они это делают, она избавляется от ошибки, однако теперь она не выбирает отдельное «gallery_name». – 001221

0

Попробуйте изменить ключ поля аргументов в находку так:

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

Это будет работать для вас. Пожалуйста, спросите, не работает ли он.

 Смежные вопросы

  • Нет связанных вопросов^_^