Laravel Вывод значений для сортировки работ портфолио

3dben

Новичок
Приветствую. Я изучаю laravel. И у меня возникли трудности с реализацией секции портфолио. Как видите на скрине ниже она у меня сортируется с помощью плагина isotop.


Я создал 3 таблицы:

1. Тут работы из портфолио с нужными полями (таблица works).

2. Список кнопок с помощью которых осуществляется фильтрация (таблица recents).

3. Связующая таблица (таблица works_item).

Как реализованы связи:

Поле из таблицы works_item - `recent_id` связанно с полем `id` в таблице recents
PHP:
$table->foreign('recent_id')->references('id')->on('recents');
Ну а тут связь с `id` в таблице works
PHP:
$table->foreign('works_id')->references('id')->on('works');
Далее я создал модели в которых определил отношения:
PHP:
class Work extends Model
{
    public function resents()
    {
        return $this->belongsToMany('App\Recent', 'work_items');
    }
}
PHP:
class Recent extends Model
{
    public function work()
    {
        return $this->belongsToMany('App\Work', 'work_items');
    }
}
Вывести сами работы труда не составило:
PHP:
@if($work)

    @foreach($work as $item)
        <div class="projects mix nz-clearfix *" data-grid="ninzio_01">
            <div class="nz-thumbnail"><img width="640" height="520" src="{{asset(env('THEME'))}}/upload/{{$item->img}}" class="attachment-Montserrat-Ninzio-Half size-Montserrat-Ninzio-Half wp-post-image" alt="portfolio10" />
                <a class="ninzio-overlay" href="#"></a>
                <div class="project-info-tab">
                    <a class="project-more" href="#"></a>
                    <h4 class="project-title">{{$item->title}}</h4>
                    <div class="projects-category"><a href="#" rel="tag">Repairing</a> | <a href="#" rel="tag">Restyling</a></div>
                </div>
            </div>
        </div>
    @endforeach

@endif
Кто сталкивался с этим плагином ( isotop ) знает, как эта чепуха работает и сортирует элементы.
HTML:
<div class="projects mix nz-clearfix * _________" data-grid="ninzio_01">
Не знаю как их вывести. то есть я пытался вывести данные из связанной таблицы(ну так я понял) {{$item->resents->item}}
HTML:
<div class="projects mix nz-clearfix * {{$item->resents->item}}" data-grid="ninzio_01">
Я так понял что в моём случае связь должна быть многие ко многим. То есть множество работ может принадлежать к множеству кнопок сортировки и на оборот к множеству кнопок может принадлежать много работ.

Где вообще можно увидеть как реализуются подобные вещи?
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Как видите на скрине ниже она у меня сортируется с помощью плагина isotop
Вообще-то, по картинке это сложно увидеть. :)

Isotope - это javascript-библиотека. К laravel она не имеет ровно никакого отношения.

Напиши сначала html и js вручную по примеру из документации на Isotope, чтобы он работал. Потом добейся того, чтобы в blade генерировался ровно такой же код, как ты писал ручками.

И вот если уже на этом этапе будут проблемы, тогда задавай более конкретные вопросы.

В следующий раз оформляй код как следует - тегом [ php ]. Картинки из phpmyadmin нафиг не нужны, показывай структуру таблиц текстом (show create table).
 

3dben

Новичок
Вообще-то, по картинке это сложно увидеть. :)

Isotope - это javascript-библиотека. К laravel она не имеет ровно никакого отношения.

Напиши сначала html и js вручную по примеру из документации на Isotope, чтобы он работал. Потом добейся того, чтобы в blade генерировался ровно такой же код, как ты писал ручками.

И вот если уже на этом этапе будут проблемы, тогда задавай более конкретные вопросы.

В следующий раз оформляй код как следует - тегом [ php ]. Картинки из phpmyadmin нафиг не нужны, показывай структуру таблиц текстом (show create table).

js отрабатывает как нужно и всё там работает. Я уже не знаю как всё объяснить. Разжевал уже как детям.


Isotope - это js библиотека для фильтрации и только.
Есть рад кнопок(синим обведено) при нажатии на которые показываются те работы у которые есть совпадение с тем что в data-filter=".construction"
HTML:
<div class="filter-container">
    <span class="filter" data-filter=".construction" data-count="5">Construction</span>
    <span class="filter" data-filter=".edition" data-count="8">Edition</span>
    <span class="filter" data-filter=".general" data-count="8">General</span>
    <span class="filter" data-filter=".marketing" data-count="6">Marketing</span>
    <span class="filter" data-filter=".repairing" data-count="6">Repairing</span>
    <span class="filter" data-filter=".restyling" data-count="3">Restyling</span>
</div>
У каждой работы есть эти атрибуты но они в виде классов
HTML:
<div class="projects mix nz-clearfix * repairing restyling" data-grid="ninzio_01">
<div class="projects mix nz-clearfix * construction general" data-grid="ninzio_01">
<div class="projects mix nz-clearfix * repairing restyling" data-grid="ninzio_01">
<div class="projects mix nz-clearfix * edition general marketing" data-grid="ninzio_01">
<div class="projects mix nz-clearfix * edition general marketing" data-grid="ninzio_01">
<div class="projects mix nz-clearfix * edition general marketing" data-grid="ninzio_01">
<div class="projects mix nz-clearfix * general repairing" data-grid="ninzio_01">
<div class="projects mix nz-clearfix * edition general repairing" data-grid="ninzio_01">
Если нажат на кнопку Construction то выведется только одна работа! 2-я! Суть не в этом плагин работает.

Я же писал выше что реализовал связи многие ко многим. У меня есть таблица с
фильтрами
HTML:
<span class="filter" data-filter=".construction" data-count="5">Construction</span>
и
HTML:
<div class="projects mix nz-clearfix * repairing restyling" data-grid="ninzio_01">
таблица с работами

Так как множество фильтров может принадлежать к множеству работ и наоборот множество работ может принадлежать к множеству фильтров

Я вывел из БД список фильтров и вывел сами работы из портфолио, но они не сортируются так как я не понимаю как вот эти значения из data-filter=".construction" вывести для каждой работы. ведь они у всех разные.

Я же привёл пример как с я вязал таблицы в самой базе данных и как это всё реализовано в моделях.

Вы можете понять что
HTML:
<div class="projects mix nz-clearfix * !!!!!!!!!ВОТ СЮДА!!!!!!!!!!!" data-grid="ninzio_01">

Мне нужно вывести из БД соответствующие фильтры для каждой работы? То есть я не знаю правильно ли я реализовал таблицы? Связи между ними? Я вроде бы это связал, но как теперь это всё вывести не понимаю.

Да-да это последний скрин из БД!

Вот тут наглядно видно что
recent_id это связанное поле с id таблицы фильтров
works_id это связь с id в таблице works(работы портфолио)

Я так понимаю что я должен как-то с помощью этой таблицы вывести для каждой работы из портфолио свои фильтры, но у меня это не вышло.

Наглядный пример как работают кнопки и сортируется работы можно увидеть тут: http://astritbublaku.com/demos/montserrat/home.html







 
Последнее редактирование:

AmdY

Пью пиво
Команда форума
{{$item->resents->item}}
Если у тебя связь многие ко многим, то логично тредположить, что $item->resents это массив и его тоже надо обходить в цикле.

Такое чувство, что ты вообще не понимаешь что делаешь, а просто копипастишь или пытаешься доделать чужой проект, найми специалиста.
 

3dben

Новичок
{{$item->resents->item}}
Если у тебя связь многие ко многим, то логично тредположить, что $item->resents это массив и его тоже надо обходить в цикле.

Такое чувство, что ты вообще не понимаешь что делаешь, а просто копипастишь или пытаешься доделать чужой проект, найми специалиста.


Я понимаю что я делаю.

Делал я так, но у меня ошибки:

HTML:
 <div class="projects mix nz-clearfix * {{$item->recents->item}}" data-grid="ninzio_01">

Код:
(3/3) ErrorException
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'work_items.work_id' in 'field list' (SQL: select `recents`.*, `work_items`.`work_id` as `pivot_work_id`, `work_items`.`recent_id` as `pivot_recent_id` from `recents` inner join `work_items` on `recents`.`id` = `work_items`.`recent_id` where `work_items`.`work_id` = 1) (View: C:\OpenServer\domains\laravel\resources\views\montserrat\main\work.blade.php)

(2/3) QueryException
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'work_items.work_id' in 'field list' (SQL: select `recents`.*, `work_items`.`work_id` as `pivot_work_id`, `work_items`.`recent_id` as `pivot_recent_id` from `recents` inner join `work_items` on `recents`.`id` = `work_items`.`recent_id` where `work_items`.`work_id` = 1)

(1/3) PDOException
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'work_items.work_id' in 'field list'
О_о опаньки, а сейчас только заметил. А почему он ищет work_id если у меня поле workS_id
 

3dben

Новичок
О_О а я сделал

В общем дело было так.

Почему то запрашивало столбец work_id вместо того который был в таблице workS_id

Затем пришлось в модели изменить название метода. Было resents(), а стало resent() без S

Перебрал всё это дело
PHP:
@foreach($item->recent as $elem) {{$elem->item}}
и заработало.

Конечный результат выглядит так:
PHP:
@if($work)

    @foreach($work as $item)
        <div class="projects mix nz-clearfix * @foreach($item->recent as $elem) {{$elem->item}} @endforeach" data-grid="ninzio_01">
            <div class="nz-thumbnail"><img width="640" height="520" src="{{asset(env('THEME'))}}/upload/{{$item->img}}" class="attachment-Montserrat-Ninzio-Half size-Montserrat-Ninzio-Half wp-post-image" alt="portfolio10" />
                <a class="ninzio-overlay" href="#"></a>
                <div class="project-info-tab">
                    <a class="project-more" href="#"></a>
                    <h4 class="project-title">{{$item->title}}</h4>
                    <div class="projects-category"><a href="#" rel="tag">Repairing</a> | <a href="#" rel="tag">Restyling</a></div>
                </div>
            </div>
        </div>

    @endforeach

@endif
AmdY спасибо =) я как-то не подумал что нужно еще раз перебрать

ВОПРОС РЕШЕН. ВСЕМ СПАСИБО =)
 
Сверху