我试图获取属于作者的书籍封面。到现在为止还挺好。但它为每本书生成一个单独的查询,加载页面需要2秒钟,我想我做错了。
我使用我的评论表急切加载(评论属于用户),但由于我使用与图像表的多态关系(图像可以属于不同类型的其他表,例如用户,事物或组,所以我不能在图像表中使用外键,因为它不是一个正确的约定),这次我找不到实现相同目的的方法。
图像模型
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
答案 0 :(得分:0)
我不认为你的问题是急切加载或变形很多,如果你的页面加载2s,你是否安装了laravel / debugbar以确切地看到你需要2秒或你运行多少查询?