Eloquent 急切加载多个表

标签 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');
    }
}

Controller

    $findBooks = Person::with(array('books' => function($query)
            {
                $query->groupBy('original_name');
            }))->find(52957);

            $allbooks = $findBooks->books;


return view('frontend.index')->with('allbooks', $allbooks)
        }

当前 View

@foreach($allbooks as $allBooks)
    @foreach($allBooks->cover as $value)
        <img class="hund" src="{{$value->link}}" alt="">
    @endforeach
@endforeach

图片: enter image description here

最佳答案

来自this post on Laracasts

$query->with([
    'child' => function ($q) {
        $q->where(’someCol', ’someVal’); //constraint on child
    },'child.grandchild' => function ($q) {
        $q->where(‘someOtherCol’, ‘someOtherVal’); //constraint on grandchild
    }
]);

关于Eloquent 急切加载多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32679874/

相关文章:

php - Laravel 5 交叉引用表

php - 在 Laravel 5.1 中返回 URL

php - 在 Laravel 5.1 中从数据库中获取数据

php - Laravel Eloquent 关系无 key

php - 如何在 laravel 5.2 中获取两个表的数据

laravel - 是否可以自定义 laravel eloquent morphToMany 的 name_type 列?

php - 如何一次插入多个技能?

php - Laravel Eloquent 返回 QueryException,未找到基表或 View

mysql - Laravel 优化求和查询

php - Laravel:如何修改通知集合