 Laravel по-русски
Laravel по-русски
      
      
    Русское сообщество разработки на 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