Как сделать соединение с 3 таблицами в CakePHP 2.x [duplicate]

Массивы Javascript - это объекты, и вы не можете просто использовать оператор равенства ==, чтобы понять, является ли содержание для этих объектов одинаковым. Оператор равенства будет проверять только, если два объекта на самом деле являются точно одним и тем же экземпляром (например, myObjVariable==myObjVariable, также работает для null и undefined).

Если вам нужно проверить, равны ли два массива я бы рекомендовал просто пересечь оба массива и убедиться, что все элементы имеют одинаковое значение (и что два массива имеют одинаковую длину).

Что касается равенства пользовательских объектов, я бы построил вместо этого конкретный equals, и я добавлю его в прототип вашего класса.

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

JSON.stringify(OBJ1) === JSON.stringify(OBJ2) 

Ну, не надо.

Хотя это может работать, если порядок свойства всегда будут одинаковыми для этих экземпляров объектов, это оставляет дверь открытой для чрезвычайно неприятных ошибок, которые трудно отследить. Всегда предпочитайте более явный подход и просто пишите чистую и читаемую функцию, которая будет проверять равенство, проверяя все необходимые поля.

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

4 ответа

Вы можете легко установить «рекурсивное» свойство в запросе find ().

$result = $this->Topic->find('all', array('recursive' => 2));

Кроме того, вы можете использовать поведение Containable в своей модели. Затем вы можете использовать:

$this->Topic->contain(array(
    'Item',
    'Item.Vote',
));

$result = $this->Topic->find('all');

или

$result = $this->Topic->find('all', array(
    'contain' => array(
        'Item',
        'Item.Vote',
    ),
));
2
ответ дан 2 revs 27 August 2018 в 04:59
поделиться

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

-2
ответ дан 2 revs, 2 users 80% 27 August 2018 в 04:59
поделиться

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

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

1
ответ дан duckyflip 27 August 2018 в 04:59
поделиться
$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'])
        )
    )
))); 

, как указано в статье nate abele: текст ссылки

40
ответ дан jmcneese 27 August 2018 в 04:59
поделиться
Другие вопросы по тегам:

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