В настоящее время я пытаюсь создать бэкэнд для проекта. В этом проекте вы сможете создать «ContentElements», который может использоваться для отображения контента на странице (в моих сайтах). Каждый ContentElement может иметь несколько опций. Когда пользователь создает новый сайт с ContentElement (например, заголовок), он вводит все параметры элемента. Например:Присоединиться к таблице с идентификатором другой таблицы соединений
"src": "/img/bg.jpg",
"text": "Lorem ipsum..."
Для того, чтобы сохранить стоимость опциона на странице она используется в, я хранить эти значения в отдельной таблице (content_elements_sites_values).
Моя схема в настоящее время выглядит следующим образом: data scheme
Так что я в настоящее время пытаюсь сделать это, когда я получаю все данные, связанные с Сайтом я также хочу, чтобы получить данные от «» content_elements_sites_values
$site = $this->Sites->get($id, [
'contain' => ['Templates', 'Colors', 'SiteTypes', 'ContentElements' => [
'ContentElementOptions' => [
'ContentElementsSitesValues'
]
]
],
'conditions' => [
// Just to explain my problem.
'ContentElementsSites.id' => 'ContentElementsSitesValues.content_elements_sites_id'
]
]);
Я действительно не знаю, возможно ли это, даже если мой «дизайн» - это общий бык *** t. Но я не могу придумать другой способ хранения заполненных данных. Я очень открыт для предложений о том, как лучше хранить эти данные. Пожалуйста, спросите, нужна ли вам дополнительная информация, чтобы помочь мне.
Спасибо заранее!
EDIT
Я пытаюсь объяснить лучше, что я хочу достичь.
Каждый сайт может иметь несколько content_elements одного и того же типа (ассоциация хранится в content_elements_sites распределительную таблицу).
Каждый content_element может иметь несколько content_element_options
Все content_element_options и content_elements определяются с помощью администратора.
Другой пользователь может создать сайт и заполнить его с content_elements и введите content_elements_sites_value для всех content_element_options. И поскольку тот же самый content_element (например, абзац или список) может иметь несколько вхождений на одном и том же сайте, мне нужно будет сохранить каждый введенный пользователем content_elements_sites_value.
Вот почему я создал связь между content_elements_sites и content_element_options.
В настоящее время я использую этот запрос, чтобы получить все ожидают, что значение:
$site = $this->Sites->find('all', [
'conditions' => [
'Sites.id' => $id
],
'contain' => ['ContentElements' => [
'sort' => [
'ContentElementsSites.order' => 'ASC'
],
'ContentElementOptions' => [
'ContentElementsSitesValues' => [
'conditions' => [
'ContentElementsSitesValues.content_elements_sites_id' => 'ContentElementsSites.id',
]
]
]
]
]
]);
Это приводит к пустой content_elements_sites_values
(int) 1 => object(App\Model\Entity\ContentElementOption) {
'id' => (int) 7,
'content_element_id' => (int) 1,
'name' => 'Test',
'json_name' => 'test',
'option_type_id' => (int) 1,
'content_elements_sites_value' => null,
}
Моя схема в настоящее время выглядит следующим образом: data scheme
Мне интересно, возможен ли этот запрос. Или, если все это слишком гибко.
Но было бы невозможно иметь несколько вхождений _content_element_ на той же странице, если я установил ** site_id ** в ** content_elements_sites_values **. Я обновлю свой вопрос, потому что я не сделал этого ясно - извините. Но вы правы, что он будет очень гибким. И это дает мне головную боль :) – Slice
Я вижу. то вы можете продолжить с ** content_elements_sites_id **. Что касается запроса, вы должны использовать ** matching() ** вместо * содержать() *, потому что вы хотите ограничить результаты основной таблицы на основе условий ассоциации. Пойдите здесь шаг за шагом - сначала выберите 2 ассоциации, проверьте запрос в наборе отладки, запустите его непосредственно в базе данных, внесите необходимые изменения, а затем добавьте к нему 3-ей ассоциации и повторите. [Ссылка] (http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#retrieving-associated-data) – Gaurav