雄辩的渴望加载多个表

时间:2015-09-20 13:23:31

标签: eloquent laravel-5.1

我试图获取属于作者的书籍封面。到现在为止还挺好。但它为每本书生成一个单独的查询,加载页面需要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

图像: enter image description here

1 个答案:

答案 0 :(得分:0)

我不认为你的问题是急切加载或变形很多,如果你的页面加载2s,你是否安装了laravel / debugbar以确切地看到你需要2秒或你运行多少查询?