Массивы Javascript - это объекты, и вы не можете просто использовать оператор равенства ==
, чтобы понять, является ли содержание для этих объектов одинаковым. Оператор равенства будет проверять только, если два объекта на самом деле являются точно одним и тем же экземпляром (например, myObjVariable==myObjVariable
, также работает для null
и undefined
).
Если вам нужно проверить, равны ли два массива я бы рекомендовал просто пересечь оба массива и убедиться, что все элементы имеют одинаковое значение (и что два массива имеют одинаковую длину).
Что касается равенства пользовательских объектов, я бы построил вместо этого конкретный equals
, и я добавлю его в прототип вашего класса.
Учитывая, что в конце вы преобразовали оба массива в String
и проверили равенство полученных строк, вы могли бы однажды подумать используя аналогичную, но более общую технику, которую вы найдете в более чем нескольких местах:
JSON.stringify(OBJ1) === JSON.stringify(OBJ2)
Ну, не надо.
Хотя это может работать, если порядок свойства всегда будут одинаковыми для этих экземпляров объектов, это оставляет дверь открытой для чрезвычайно неприятных ошибок, которые трудно отследить. Всегда предпочитайте более явный подход и просто пишите чистую и читаемую функцию, которая будет проверять равенство, проверяя все необходимые поля.
Вы можете легко установить «рекурсивное» свойство в запросе 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',
),
));
Вы должны изучить HaBTM (имеет и принадлежит многим) http://book.cakephp.org/2.0/ru/models/associations-linking-models-together.html
Вам нужна поддержка рекурсивных ассоциаций, что в настоящее время невозможно с запасом CakePHP. Хотя это может быть достигнуто с помощью некоторого трюка bindModel или экспериментального RecursiveAssociationBehavior .
Оба этих решения потребуют от вас использования дополнительного кода или полагаться на поведение в вашем приложении, но если вы сопротивляетесь соблазну писать чистый код SQL, вы будете вознаграждены тем, что сможете использовать разбиение на страницы Cake, автоматические условия, манекены модели и т. д.
$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: текст ссылки