Как я пишу запрос соединения через несколько таблиц в CakePHP?

Думаю, проблема в том, что вы не препятствуете отправке вашей формы. Вы можете сделать это: 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>

15
задан 5 revs, 4 users 64% 20 April 2014 в 23:17
поделиться

5 ответов

Что вам нужно, так это поддержка рекурсивных ассоциаций, которая в настоящее время невозможна в стандартной версии CakePHP.
Хотя это может быть достигнуто с помощью некоторого обмана bindModel
или экспериментального RecursiveAssociationBehavior .

Оба эти решения либо потребуют от вас использования дополнительного кода, либо полагаются на поведение в вашем приложении, но если вы будете сопротивляться искушению написать чистый код SQL, вы будете вознаграждены возможностью использовать нумерацию Cake, автоматические условия, магию модели и т. д.

1
ответ дан 1 December 2019 в 00:41
поделиться

Я буду честен здесь и скажу, что вы, вероятно, будете намного счастливее, если вы просто создадите функция в вашей модели, что-то вроде getTopicVotes () и вызова там (). Любое другое решение, которое я могу придумать, только сделает его более сложным и, следовательно, более уродливым.

Редактировать:

В зависимости от размера ваших данных и при условии, что вы правильно настроили отношения модели (Тема имеет много элементов, имеет много голосов) ), вы можете сделать простой поиск ('all'), содержащий всех предметов и голосов, и затем сделать что-то вроде этого:

foreach ($this->data as &$topic)
{
    $votes = Set::extract('/Topic/Item/Vote', $topic);
    $topic['Topic']['vote_count'] = count($votes);
}

Здесь важны две вещи:

  1. Если у вас много данных, вы, вероятно, должны забыть об этом подходе, он будет чертовски медленным.
  2. I ' Вы написали это из моей памяти, и в реальной жизни это может выглядеть не так и / или вообще не работать: -)
2
ответ дан 1 December 2019 в 00:41
поделиться

Вы должны изучать HaBTM (Имеет и принадлежит многим) http://book.cakephp.org/2.0/ru/models/associations-linking-models-together.html

-2
ответ дан 1 December 2019 в 00:41
поделиться
$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'])
        )
    )
))); 

, как указано в статье Нейта Абеле: текст ссылки

41
ответ дан 1 December 2019 в 00:41
поделиться

Вы можете легко установить свойство "рекурсивный" в запросе 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',
    ),
));
2
ответ дан 1 December 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: