Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Прошу помощи и разъяснения. Из документации не могу понять что мне нужно сделать.
Есть таблицы
Таблица проектов портфолио - projects:
id
title
body
cover
Таблица тегов для проектов портфолио - tags:
id
title
Пивотная таблица для предыдущих - project_tag:
id
project_id
tag_id
Таблица фото для проектов - photos:
id
project_id
path
Задача при выводе проекта выводить также теги проекта, при выводе страницы тегов - всех проектов по этому тегу. Тут проблем нет, многие-ко многим в помощь.
Как вывести все фото проектов при загрузке страницы тега?
Другими словами, при загрузке страницы конкретного тега нужно выводить все проект по этому тегу и все фото этих проектов.
Полиморфия нужна? Но в ней запутался совсем
Не в сети
Не в сети
Project hasMany Photos
Tag::with(projects.photos)
Нет, не нужна.
Не в сети
Т.е. я одним запросом в Tag моделе могу сделать весь вывод? Отдельно запрашивать проекты не надо получается?
Изменено Arat (10.04.2015 14:59:06)
Не в сети
Спасибо, ребята!
Не в сети
// Project.php
public function photos() {
return $this->hasMany('Photo');
}
//TagController.php
public function getTag($id) {
$photos = Tag::getPhotos($id);
}
//Tag.php
public static function getPhotos($id) {
$photos = Tag::with('projects.photos')->get();
return $photos;
}
Не в сети
Не в сети
полиморфия не нужна. во-первых есть hasManyThrough, во-вторых, если выводятся проекты и их фото в привязке к проектам, то можно просто их загрузить вместе. eager loading поддерживает загрузку вложенных связей. %%(php)Tag::with('projects.photos')->get()%% загрузит и проекты и их фотографии.
Апдейт.
Проекты не выводятся. Выводятся только их фото. Получилось так, что выводит только фото последнего (по id) проекта.
Не получается, блин
Не в сети
$tags = Tag::with('projects.photos')->get()
foreach($tags as $tag) {
<section>
<h2>$tag->title</h2>
<h3>Проекты:</h3>
<article>
foreach($tag->projects as $project) {
<h4>$project->title</h4>
<h5>Фото проекта:</h5>
foreach($project->photos as $photo) {
<img src="$photo->url">
}
}
</article>
</section>
}
Не в сети
Хм... это при выводе всех тегов.
У меня задача немного иная. При вызове конкретного тега, нужно вывести фото всех проектов, которые относятся к этому тегу.
Не могу я вкурить как правильно применить hasManyThrough...
Не в сети
//Tag.php
public function projects() {
return $this->belongsToMany('Project');
}
public function photos() {
return $this->hasManyThrough('Project', 'Photo', 'project_id', 'tag_id');
}
//Project.php
public function tags() {
return $this->belongsToMany('Tag');
}
public function photos() {
return $this->hasMany('Photo');
}
//Photo.php
public function project() {
return $this->belongsTo('Project');
}
//TagController.php
$tag = Tag::getTag($id);
$tags = Tag::getTags();
return View::make('pages.services')->with('tag', $tag)->with('tags', $tags);
Понятно, что сейчас фото не выводит. Вот я и не могу понять как вывести фото для $tag = Tag::getTag($id);
Подскажите, плиз!
Не в сети
Ошибка то какая?
Судя по примеру из доков, это не будет работать с manyToMany. Нужен tag_id в projects.
Ну и должно быть $this->hasManyThrough('Photo', 'Project')
Не в сети
Ошибка то какая?
Судя по примеру из доков, это не будет работать с manyToMany. Нужен tag_id в projects.
Ну и должно быть $this->hasManyThrough('Photo', 'Project')
Ошибки нет. Просто не тянет фото из базы.
Блин, tag_id в projects не пойдет - много-ко-многим с tags через пивотную таблицу.
Какие могут быть варианты тогда?
Не в сети
dd(Tag::find(1)->photos) что выводит?
Не в сети
dd(Tag::find(1)->photos) что выводит?
Column not found: 1054
Unknown column 'projects.tag_id'
Не в сети
Не в сети
}%если
%%(php)
foreach ($tag->projects as $project) {
$photos = Photo::getPhotos($project->id);
}
%%
то выводит фото последнего (по id) проекта
Потому что в цикле переменная перезаписывается и остается последнее значение. Нужен массив $photos[]
Зачем в каждой итерации заново дергать базу? Все данные уже есть в $project->photos
Уверен, что можно найти более элегантное решение. Например вот тут что-то есть http://laravel.io/forum/03-04-2014-hasm … ny-to-many
Не в сети
Не подчерпнул я там идею
Не в сети
Страницы 1