Думаю, проблема в том, что вы не препятствуете отправке вашей формы. Вы можете сделать это: e.preventDefault()
в .submit(function(e){})
функция обратного вызова
$("#reg").submit(function(e)
{
e.preventDefault();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="reg">
<input type="text" name="name" value="Rick">
<input type="text" name="last_name" value="Astley">
<input type="submit">
<form>
Что вам нужно, так это поддержка рекурсивных ассоциаций, которая в настоящее время невозможна в стандартной версии CakePHP.
Хотя это может быть достигнуто с помощью некоторого обмана bindModel
или экспериментального RecursiveAssociationBehavior .
Оба эти решения либо потребуют от вас использования дополнительного кода, либо полагаются на поведение в вашем приложении, но если вы будете сопротивляться искушению написать чистый код SQL, вы будете вознаграждены возможностью использовать нумерацию Cake, автоматические условия, магию модели и т. д.
Я буду честен здесь и скажу, что вы, вероятно, будете намного счастливее, если вы просто создадите функция в вашей модели, что-то вроде getTopicVotes () и вызова там (). Любое другое решение, которое я могу придумать, только сделает его более сложным и, следовательно, более уродливым.
Редактировать:
В зависимости от размера ваших данных и при условии, что вы правильно настроили отношения модели (Тема имеет много элементов, имеет много голосов) ), вы можете сделать простой поиск ('all'), содержащий всех предметов и голосов, и затем сделать что-то вроде этого:
foreach ($this->data as &$topic)
{
$votes = Set::extract('/Topic/Item/Vote', $topic);
$topic['Topic']['vote_count'] = count($votes);
}
Здесь важны две вещи:
Вы должны изучать HaBTM (Имеет и принадлежит многим) http://book.cakephp.org/2.0/ru/models/associations-linking-models-together.html
$markers = $this->Marker->find('all', array('joins' => array(
array(
'table' => 'markers_tags',
'alias' => 'MarkersTag',
'type' => 'inner',
'foreignKey' => false,
'conditions'=> array('MarkersTag.marker_id = Marker.id')
),
array(
'table' => 'tags',
'alias' => 'Tag',
'type' => 'inner',
'foreignKey' => false,
'conditions'=> array(
'Tag.id = MarkersTag.tag_id',
'Tag.tag' => explode(' ', $this->params['url']['q'])
)
)
)));
, как указано в статье Нейта Абеле: текст ссылки
Вы можете легко установить свойство "рекурсивный" в запросе find ().
$result = $this->Topic->find('all', array('recursive' => 2));
В качестве альтернативы вы можете использовать в своей модели поведение «Контейнер». Затем вы можете использовать:
$this->Topic->contain(array(
'Item',
'Item.Vote',
));
$result = $this->Topic->find('all');
или
$result = $this->Topic->find('all', array(
'contain' => array(
'Item',
'Item.Vote',
),
));