Спасибо, что прочитали. Я изучаю cakephp и имею несколько вопросов о Join in Cakephp. Я не могу найти подходящий ответ в ИнтернетеУ меня есть несколько вопросов о Присоединиться к Cakephp
1, В чем разница между innerjoin и innerjoinwith (например, leftjoin и leftjoinwith) Я думал, что это связано с проблемой исполнения, но не может найти никакой подсказки.
2, я не могу получить точную разницу между «совпадением» и «содержать» . Я знаю, как они извлекают данные, но я думал, что результат будет таким же, как результат совпадения и соответствия, используется innerjoin , и содержать с помощью leftjoin.
но но я не могу найти, в чем разница между приведенным ниже кодом (с использованием содержания) и сопоставлением.
$query = $articles->find()->contain([
'Comments' => function ($q) {
return $q
->select(['body', 'author_id'])
->where(['Comments.approved' => true]);
}
]);
3, что такое «_matchingData» в сопоставлении? Я прочитал это описание, то есть «Метод innerJoinWith() работает так же, как match(), это означает, что вы можете использовать точечную нотацию для объединения глубоко вложенных ассоциаций: опять же, единственная разница заключается в том, что дополнительные столбцы не будут добавлены к набору результатов, и никакое свойство _matchingData не будет установлено. "
, но я не нашел никакого описания о _matchingData. даже в API ... что это такое?
вы можете ответить один из них, все в порядке. пожалуйста, помогите мне
Если включить [протоколирование запросов] (https://book.cakephp.org/ 3.0/ru/orm/database-basics.html # query-logging), вы можете попробовать разные комбинации запросов и изучить созданный ими SQL, что может дать вам некоторое представление о 1 и 2. И глядя на данные, возвращенные из запрос 'matching' должен дать вам четкое представление о том, что находится в' _matchingData'. Очень короткий ответ заключался бы в том, что если вы будете содержать отношения hasMany, записи будут загружены отдельным запросом, а 'matching' будет делать это с помощью соединения. –
Грег Шмидт // Спасибо! Это полезно! – Jgj1018