Я пытаюсь получить обложки книг, принадлежащих автору. Все идет нормально. Но он генерирует отдельный запрос для каждой книги и занимает 2 секунды, чтобы загрузить страницу, я думаю, что я делаю что-то неправильно.Eloquent нетерпеливо загружает несколько таблиц
Я использую загрузку с моей таблицей комментариев (комментарий принадлежит пользователю), но поскольку я использую полиморфные отношения с таблицей изображений (изображение может принадлежать к другим типам других таблиц, таких как пользователь, предмет или группа , поэтому я не могу использовать внешние ключи в таблице изображений, так как это не правильное соглашение), на этот раз я не смог найти способ добиться того же.
Изображение Модель
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Image extends Model
{
public function imageable()
{
return $this->morphTo();
}
}
лицо модели (Автор)
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Person extends Model {
public function books()
{
return $this->belongsToMany('\App\Models\Thing', 'person_thing');
}
вещь Модель (Книги)
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Thing extends Model {
public function cover() {
return $this->morphMany('\App\Models\Image', 'imageable');
}
}
Контроллер
$findBooks = Person::with(array('books' => function($query)
{
$query->groupBy('original_name');
}))->find(52957);
$allbooks = $findBooks->books;
return view('frontend.index')->with('allbooks', $allbooks)
}
Текущего вид
@foreach($allbooks as $allBooks)
@foreach($allBooks->cover as $value)
<img class="hund" src="{{$value->link}}" alt="">
@endforeach
@endforeach
Я не пробовал это с нетерпеливым погрузочным ограничением раньше, но вы можете сделать вложенное отношение жадной загрузки, используя точечную нотацию. Поэтому попробуйте 'array ('books.cover' => function ...'. Единственное, что я не уверен, - это то, что '' query-> groupBy (...) 'тогда ссылается на каждую обложку или каждый книга. – AgmLauncher
Вы можете попытаться лениво зарядить отношения крышки через возвращенную коллекцию. '$ allbooks = $ findBooks-> books-> load ('cover');' Я не уверен, что 'groupBy' повлияет на это также, но это мысль. –