2011-07-14 3 views
1

Как говорит название, у меня возникают проблемы с присоединяется к моей находке-запросу, с ошибками, возникающих как:CakePHP: стыковка внутри содержит

preg_match() expects parameter 2 to be string, array given [CORE/cake/libs/model/behaviors/containable.php, line 301] 

Я попытался добавить joins в массив там, но это ничего не изменило.

Это параметры, которые я передаю методу поиска.

$options = array(
    'contain' => array(
     'Answer' => array(
     'conditions' => array('Answer.type' => 'answer'), 
     'joins' => array(
      $this->votesJoin() 
     ), 
     'Comment' => array(
      'conditions' => array('Comment.type' => 'comment'), 
      'joins' => array(
       $this->votesJoin() 
      ) 
     ) 
    ), 
     'Comment' => array(
     'conditions' => array('Comment.type' => 'comment'), 
     'joins' => array(
      $this->votesJoin() 
     ) 
    ), 
     'User', 
     'Tag' => array() 
    ), 
    'joins' => array(
     $this->votesJoin() 
    ), 
    'conditions' => array(
     'Question.id' => $id 
    ) 
); 

return $this->find('first', $options); 

с votesJoin() возвращение следующего массива.

(
    [table] => (SELECT Vote.node_id, SUM(value) as total FROM votes AS `Vote` WHERE 1 = 1 GROUP BY `Vote`.`node_id` ) 
    [alias] => Vote 
    [conditions] => Vote.node_id = Question.id 
) 

То, что я пытаюсь сделать: Каждый пользователь может вверх/downvote узел (вопрос/ответ/комментарий). При соединении я пытаюсь добавить сумму этих голосов. database http://github.com/navale/QA/wiki/img/datamodel.png

+0

поэтому вы хотите получить: вопрос, комментарии по вопросу, ответы, комментарии по ответам и сумму голосов за все эти элементы .. и все в одном запросе .. кажется довольно амбициозным мне = P – pleasedontbelong

+0

На, я знаю, что мне понадобятся разные вопросы по вопросу, ответам и комментариям, но я * хотел бы присоединиться к голосам к этим запросам ... – marijnvdwerf

+0

Ваш '$ this-> voteJoin()' возвращает массив? Тогда вы не должны обертывать его еще одним массивом. – lxa

ответ

1

Вы должны использовать «соединения» только для вещей, которые не могут быть выполнены с помощью отношений модели Cake и Containable. Я не знаю подробностей вашей базы данных, но я думаю, что операция поиска может быть упрощена. Почему бы вам не опубликовать схему для этих таблиц здесь?

попробовать это:

$options = array(
'contain' => array(
    'Answer' => array(
    'conditions' => array('Answer.type' => 'answer'), 
    'Vote' => array(
     'fields' => array('SUM(Vote.value)'), 
     'group' => array('Vote.parent_id') 
    ), 
    'Comment' => array(
     'conditions' => array('Comment.type' => 'comment'), 
     'Vote' => array(
         'fields' => array('SUM(Vote.value)'), 
         'group' => array('Vote.parent_id') 
       ) 
    ) 
), 
    'Comment' => array(
    'conditions' => array('Comment.type' => 'comment'), 
    'Vote' => array(
     'fields' => array('SUM(Vote.value)'), 
     'group' => array('Vote.parent_id') 
    ) 
), 
    'User', 
    'Tag' => array() 

), 'условия' => массив ( 'Question.id' => $ ID ) );

Вы получаете значение суммы голосования для каждого ответа, комментария и комментария для ответа. (Возможно, вам понадобится добавить «hasMany» Vote в модели Node, если вы еще этого не сделали)

Если вместо этого вы хотите получить одну общую сумму Голосовать за вопрос, тогда я бы предложил: получить список ответов и комментариев вопрос:

$ lvl1 = найти ('список', 'поля' => массив ('ID'), => массив 'условия' ("Node.parent_id «=> $ ID))

затем получить список комментариев ответов

$ LVL2 = найти ('список', 'полей' => массив ('ID'), 'условия' => массив ('Node.parent_id' => $ lvl1))

то просто объедините массив 2, затем выполните сумму над этим.

+0

Добавлена ​​схема, что-нибудь еще, что вы хотели бы знать? – marijnvdwerf

+1

Извините, не работает. Containable видит «группу» как поле ... Я думаю, что я просто получу идентификаторы всех комментариев и ответов, и просто сделаю отдельное голосование на этом массиве ... Спасибо за вашу помощь хотя;) – marijnvdwerf

+0

действительно ? это странно: http://nuts-and-bolts-of-cakephp.com/2009/10/06/top-10-things-to-look-forward-to-in-cakephp-1-3/ –

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