2013-07-30 3 views
0

Я пытаюсь сделать запрос на модели под названием uploads, где я ищу все загрузки, у которых есть данный тег. Я использую плагин CakeDC Tags, и я работаю из этого урока, http://mark-story.com/posts/view/using-bindmodel-to-get-to-deep-relations. Я пытаюсь преодолеть тот факт, что плагин предоставляет два запроса (которые не могут быть найдены) по умолчанию.Unbind не может найти модель, которая явно существует

Итак, я пытаюсь сделать присоединиться с помощью функции bindModel:

$this->Upload->Behaviors->load('Containable'); 

    $this->Upload->unbindModel(array(
     'hasAndBelongsToMany' => array('Tag') 
     )); 

    $this->Upload->bindModel(array(
     'hasOne' => array(
      'Tagged' => array(
          'className' => 'Tags.Tagged', 
       'foreignKey' => false, 
       'conditions' => array('Tagged.foreign_key = Upload.id') 
      ), 
      'Tag' => array(
       'foreignKey' => false, 
       'conditions' => array('Tag.id = Tagged.tag_id') 
      ) 
     ) 
    )); 

    $tag = $this->Upload->find('all', array(
     'contain' => array('Tag'), 
     'conditions' => array('Tag.name' => $tagname) 
     )); 

Однако: SQLSTATE [42S22]: Column не найдено: 1054 Неизвестный столбец 'Tagged.tag_id' в 'по статье'

Я считаю, что это может быть связано с тем, что Tagged - это только таблица соединений, а не подходящая модель. Как я могу заставить таблицу присоединиться, поскольку мне это нужно?

SQL-дамп: SQL запросов:

SELECT 
    Upload.id, 
    Upload.name, 
    Upload.description, 
    Upload.created, 
    Upload.modified, 
    Upload.filetype, 
    Upload.numberofviews, 
    Upload.numberofdownloads, 
    Upload.model_dir, 
    Upload.model, 
    Upload.owner, 
    Upload.license, 
    Upload.category, 
    Upload.default_picture, 
    Upload.soft_delete, 
    Tag.id, 
    Tag.identifier, 
    Tag.name, 
    Tag.keyname, 
    Tag.weight, 
    Tag.created, 
    Tag.modified 
FROM 
    database.uploads AS Upload 
     LEFT JOIN 
    database.tags AS Tag ON (Tag.id = Tagged.tag_id) 
WHERE 
    1 = 1 

ответ

0

Ответ на вопрос, связанный с https://github.com/CakeDC/tags/wiki/Find-tagged-objects, состоит в том, чтобы вообще не участвовать в объединении, и позволить плагину работать для меня.

$tag = $this->Upload->Tagged->find('tagged', array('by' => $tagname, 'model' => 'Upload', 'link' => 'User')); 

К сожалению, похоже, что связанная с Uploads информация не указана. Я уверен, что найду способ обойти это.

+0

Не могли бы вы отметить это как принятый ответ? – Nunser

+0

Несомненно. Чувствовал себя немного странно, когда я отвечу на правильный ответ. Как глупо со мной. – baordog

+0

Если это работает, вы всегда должны отмечать его как принятое, чтобы другие могли попробовать решение, если у них есть такая же проблема. Если приходит еще один ответ, что вы чувствуете себя лучше, чем ваш (объясните больше проблемы или поработайте магически), вы всегда можете не принимать ваш ответ и проверять другое. – Nunser

0

Это нормально, что он не может найти модель, если не сказать ассоциации искать модели в плагине он принадлежит. Это не проблема плагина, а ваши ассоциации.

'hasOne' => array(
      'Tagged' => array(
       'className' => 'Tags.Tagged', 
       'foreignKey' => false, 

См. Префикс имени плагина классаName. То же самое для модели тегов. See the book.

+0

Сделал снимок, и у меня такая же ошибка. Я изменил сообщение, чтобы отразить это. Я знаю, что вы сделали плагин - пожалуйста, дайте мне знать, если есть «официальный» способ сделать это. Я буквально трачу часы на это, и далеко не добрался. – baordog