Вывод из базы в Laravel

179
12 февраля 2019, 23:20

есть таблица с домашними заданиями homeworks:

id
replay

и таблицы с ответами, которых может быть несколько для одного дз homework_answers:

id
id_homework
replay

как мне в шаблоне вывести к каждому дз несколько ответов: вот я вывожу список домашних заданий? вот так я только вывожу одно дз

$done = DB::table('homework_answers')
                ->leftJoin('homeworks', 'homework_answers.id_homework', '=', 'homeworks.id')
                ->leftJoin('schedules', 'homeworks.id_shedule', '=', 'schedules.id')
                ->leftJoin('relations', 'schedules.id_relation', '=', 'relations.id')
                ->select('homework_answers.answer','homework_answers.basename', 'homework_answers.created_at','homeworks.replay', 'schedules.theme', 'homeworks.file','homeworks.filename', 'homeworks.dateofdelivery')
                ->where('relations.teacher', $id)
                ->where('relations.learner', Auth::user()->id)
                ->where('homeworks.status', 2)->orderBy('homeworks.id', 'asc')->get();

в шаблоне вот так

@foreach($done as $iteme)
      <div class="item">
          <p class="title">{{ $iteme->theme }}</p>
          <div class="data-content">
             <div class="left">
                 <div class="text">{{ $iteme->replay }}</div>
                      <a href="{{ $iteme->file }}">{{ $iteme->filename }}</a>
                 </div>
             <div class="right all">
                 <div class="date-block">Дата сдачи: {{ $iteme->created_at }}</div>
                     <p class="file">{{ $iteme->basename }}</p>
                 </div>
           </div>
       </div>

@endforeach

Answer 1

Привет тебе тут поможет отношение - Один ко многим 1) Если у тебя не созданы модели то тебе нужно их создать Homework и HomeworkAnswer

2) Далее добавить в них взаимосвязи

Один ко многим

Отношение «один ко многим» используется для определения отношений, где одна модель владеет некоторым количеством других моделей. Примером отношения «один ко многим» является статья в блоге, которая имеет «много» комментариев. Как и другие отношения Eloquent вы можете смоделировать это отношение таким образом:

namespace App;
use Illuminate\Database\Eloquent\Model;
class Homework extends Model
{
  /**
   * Получить ответы из домашки.
   */
  public function answers()
  {
    return $this->hasMany('App\HomeworkAnswer');
  }
}

Eloquent автоматически определяет столбец внешнего ключа в модели Comment. По соглашению, Eloquent возьмёт «snake case» названия владеющей модели плюс _id. Таким образом, для данного примера, Eloquent предполагает, что внешним ключом для модели HomeworkAnswer будет homework_id.

После определения отношения мы можем получить доступ к коллекции ответов, обратившись к свойству answers. Помните, что поскольку Eloquent поддерживает «динамические свойства», мы можем обращаться к функциям отношений, как если бы они были определены свойством модели:

$answers = App\Homework::find(1)->answers;
foreach ($answers as $answer) {
  //
}

Так как отношения служат и в качестве конструкторов запросов, можно добавлять дополнительные условия с помощью метода answers():

$answers = App\Homework::find(1)->answers()->where('title', 'foo')->first(); Можно указать внешний и локальный ключи, передав дополнительные параметры в метод hasMany():

return $this->hasMany('App\HomeworkAnswer', 'foreign_key');
return $this->hasMany('App\HomeworkAnswer', 'foreign_key', 'local_key');

Один ко многим (Обратное отношение)

После получения доступа ко всем ответам домашки давай определим отношение, которое позволит ответу получить доступ к его домашке. Чтобы определить обратное отношение hasMany(), давайте определим функцию отношения на дочерней модели, которая вызывает метод belongsTo():

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class HomeworksAnswer extends Model
{
  /**
   * Получить домашку данного ответа.
   */
  public function homework()
  {
    return $this->belongsTo('App\Homework', 'foreign_key', 'other_key');
  }
}

После определения отношений мы можем получить модель Homework для HomeworksAnswer, обратившись к динамическому свойству homework:

$answer = App\HomeworkAnswer::find(1);
echo $answer->homework->title;
Answer 2

таблица связи между преподавателем и учеником и предмет

таблица домашних заданий, которые формирует препод

Ответы ученика на домашнее задание, их может быть несколько

и здесь я вывожу задание и ответы на него в колонке right ответы

@foreach($done as $iteme)
      <div class="item">
          <p class="title">{{ $iteme->theme }}</p>
          <div class="data-content">
             <div class="left">
                 <div class="text">{{ $iteme->replay }}</div>
                      <a href="{{ $iteme->file }}">{{ $iteme->filename }}</a>
                 </div>
             <div class="right all">
                 <div class="date-block">Дата сдачи: {{ $iteme->created_at }}</div>
                     <p class="file">Ответ</p>
                     <p class="file">Ответ два</p>
                 </div>
           </div>
       </div>
@endforeach
READ ALSO
Пустой лист в TCPDF

Пустой лист в TCPDF

Я пытаюсь сгенерировать PDF файл из Xls файлаС помощью PHPExcel и TCPDF

212
Laravel передача данных из посредника в контроллер (IoC)

Laravel передача данных из посредника в контроллер (IoC)

Появилась нужда из посредника (middleware) при НЕ прохождении проверки редиректить с определёнными параметрами в контроллерНикогда с IoC ещё не сталкивался...

211
Ошибка прайс-листа в валидаторе Yandex XML

Ошибка прайс-листа в валидаторе Yandex XML

*Возникшие ошибки: Error parsing XML feed: Not allowed value &quot;THB&quot; for the attribute &quot;id&quot;: XML tag &quot;currency&quot;Столбец 37 Строка 9

192
Проверка данных на входе

Проверка данных на входе

Ребята подскажите пожалуйстаЕсть задача, сделать веб

176