Ребятки, спасибо всем, кто мутит Drupal и те, кто русскоязычное сообщество развивает, этому сайту. Я сейчас сижу кайфую от Друпал, делаю систему, изучаю Views, все шикарно. Друпал мощная вещь!
Вопрос у меня по Views, а именно по замечательной штуке Cвязи во views, Relationships, Entity Referens и тп.
Объясните пожалуйста, что означают эти два типа связей?
Содержимое referenced from field_takoe_to
Местонахождение: tam_to
Содержимое использует field_takoe_to
Связать каждую Содержимое с field_takoe_to с содержимое.
- Что значит Содержимое referenced from
- Что значит Местонахождение
- Содержимое использует
- Связать каждую Содержимое с с содержимое
Sql более менее использую и Join Poin тоже и создаю довольно сложные представления (из 2-3-4 таблиц) может по аналогии с ним объяснит кто ни будь.
А в целом задача простая.
Допустим есть три объекта
- Человек
- Водитель
- Маршрут
Мне нужны часть полей из
Водитель
- код
- телефон
- категория прав
Человек
- заголовок (имя чела)
- фото
Маршрут
- название маршрута
Водитель ссылается на Человек и Маршрут (ссылка на сущность типа содержимое). Поля ссылок называются: ВодительЧеловек и ВодительМаршрут.
- Человек (Поле: ВодительЧеловек)
- Маршрут (Поле: ВодительМаршрут)
Вообщем поля объекта Водитель
- Node Id
- Заголовок
- ВодительЧеловек (Ссылка на Человек)
- ВодительМаршрут (Ссылка на Маршрут)
Делаю представление.
(Настройки всякое такое пропускаю)
Выбираю нужные мне поля
- ВодительКод (id материала по сути) - Да
- ВодительТелефон - Да
- ВодительАвто - Да
- ВодительЧеловек - Да
- ВодительМаршрут - Да
- ВодительЧеловекФото - Нет
Нажав добавить поле в представление в выпадающем списке вариантов полей я вижу поле ВодительЧеловекФото и выбираю его, но фотографию не подгружаются. И я так понимаю, что нужно добавить связь. Хотя я думал, что если связь не добавлена, то и поля в списке не должно быть. Но вообще Водитель ссылается на Человек и может быть поэтому поле ВодительЧеловекФото есть в списке доступных полей.
Вообщем если добавить связь с содержимым то фотография появляется. В целом представление создать получается, но я не совсем понимаю, как это происходит. В дальнейшем возможны более сложные представления поэтому хотелось бы понять эти нюансы. Потому, как чем дальше тем сильнее метод тыка начинает давать сбои в работе.
В Sql я бы просто связал Водитель.ЧеловекКод = Человек.ЧеловекКод и Водитель.МаршрутКод = Маршрут.МаршрутКод. И потом выбрал бы все нужные поля и они появились бы. И я мог бы использовать JOIN или WHERE. Как такое же проворачивать во Views. То, что нужны связи я понял. Но не донца понял, как эти связки работают.
Напоминаю вопросы
- Что значит Содержимое referenced from
- Что значит Местонахождение
- Содержимое использует
- Связать каждую Содержимое с с содержимое
- Что значит Дельта
И еще я заметил, что во Views в разделе Связи поля можно связывать между собой. То есть если я добавлю одно поле связи, а затем второе, то у полей появляется выпадающий список полей связи и Друпал спрашивает не желаю ли я связать их. Но я не совсем понимаю пока, в каких задачах это используется.
Комментарии
Views более высокий layout между запросов и ER, для примера если есть сущность и в ней есть поле типа entityreference на taxonomy_term, что чтобы вывести поле из термина для объекта нужна связь, тогда поля из термина можно будет добавить для вывода views.
А так то визуально в сущности создается ссылочное поле на связь.
Технически создается отдельная таблица для поля с id сущности владельца, дельтой и значением id связанной сущности.
Значит если есть entityreference, то некоторые поля доступны, но не все? И как я заметил минимум будет доступно поле "заголовок (title)" того entity на которое ссылается первое entity? А вот все остальные поля или некоторые из них могут быть визуально доступны в списке полей (как у меня в примере с фото), но вот их содержимое доступно не будет, пока не пробросишь явную связь через связи?
А вот насчет Layout, ER, технически отдельная таблица с id сущности и т.п. это очень интересная информация, возьму на заметку, что бы в будущем понять это по сильнее.
А поля со словом дельта я действительно встречал, но я совсем не понимаю пока, что это. Если у тебя не займет много времени, не будет трудно и ты мог бы хотя бы вкратце рассказать об этом, то буду очень признателен за это тоже.
Добавлю, что вы можете включить во вьюсе отображение sql запроса. Так вам будет легче понять что происходит
Кстати да спасибо за дельный совет. На самом деле я так и сделал за что спасибо еще кстати Ивану с Youtube и его видео о Views. Это реально полезная функция и я обрадовался когда ее обнаружил.
И пользуясь случаем хочу рассказать о своем опыте с этим. Это мне уже пару раз помогло. Я даже пару раз заглянул в таблицы Drupal и читнул хорошую статью в которой говорилось про поля и bundle, жаль потерял ссылку на нее, новичку было бы полезно. Все это немного помогло прочесть Sql. А так я с предвкушением жду тех временем, когда я смогу спокойно читать Sql по Views-ах, но похоже надо еще подучиться, как следует). Из за того, что это не просто Sql, а генертор Sql некоторые места для меня действительно, как код я который я не могу расшифровать, не зная чем и как тут занимается Друпал.
Думаю может уйти 2-3 года. Друпал прекрасная система, она одновременно просто для тех, кто хочет с ней работать по простому и невероятно мощная для тех, кто хочет с ней работать мощно. Очень круто, очень круто. Спасибо Вам ребята за дельные советы.
Для вывода доступности само поле этого типа, а для того чтобы вывести поля из сущности на которую есть ссылки в нем - нужна связь чаще всего.
Бывает уже есть контроллер для поля по умолчанию.
поля сущности связанной с родителем через поле связи - через "связь" views
delta - номер элемента для поля, для упрощения все поля - множественные так и связи, просто если не множественное то delta только 0
в отличие от полной ER типы связей упрощены до "многие к одному" в поле entityreference
Второе - прямая связь, первое - обратная. То есть во втором случае мы отбираем материалы, на которые ссылается ER-поле текущего материала, а в первом - материалы, которые своими ER-полями ссылаются на текущий.
Дельта - это порядковый номер значения в поле, позволяющем хранить несколько значений.