2

我有一个模型,我急切地加载了对另一个表的两个引用(在本例中为posts.created_by_id == users.idposts.updated_by_id == users.id)。

class Post {
    protected $table = 'posts';

    public function scopeLatest() {
        return $query->with(['created_by', 'updated_by'])
                     ->orderBy('created_at', 'desc');
    }

    public function createdBy() {
        return $this->belongsTo('User');
    }

    public function updatedBy() {
        return $this->belongsTo('User');
    }
}

class User {
    protected $table = 'users';

    public function posts() {
        return $this->hasMany('Post', 'created_by');
    }
}

这会导致类似以下查询:

SELECT * FROM tbl ORDER BY created_at DESC;
SELECT * FROM users WHERE id IN (?); (created_at)
SELECT * FROM users WHERE id IN (?); (updated_at)

这是有道理的——我们将所有引用的记录加载到 中created_by,然后updated_by——但是我们可以优化它以组合 id 对users.

我的问题是:这是 Eloquent 目前支持的吗?

4

2 回答 2

0

我认为这可能是您正在寻找的:

class Post {
    protected $table = 'posts';

    public function scopeLatest($query) {
        return $query->with('createdBy', 'updatedBy')
                 ->orderBy('created_at', 'desc');
    }

    public function createdBy() {
        return $this->belongsTo('User','created_by_id');
    }

    public function updatedBy() {
        return $this->belongsTo('User','updated_by_id');
    }
}

class User {
    protected $table = 'users';

    public function postsCreated() {
        return $this->hasMany('Post', 'created_by_id');
    }

    public function postsUpdated() {
        return $this->hasMany('Post', 'updated_by_id');
    }
}
于 2014-07-03T02:19:06.580 回答
0

没有为我工作。似乎急切的负载仅适用于表的一个实例。对我来说,只有一个关系被填补了。Eloquent 可能使用表名作为急切加载的指针。它会生成所有急切的加载查询,但只会填充一个。

由于这个问题,我不得不将数据分成不同的表(并且没有时间深入挖掘 Eloquent 代码。)

于 2013-10-07T20:11:25.413 回答