在雄辩模型中使用急切加载问题

时间:2019-03-08 13:49:00

标签: laravel-5 eloquent eager-loading laravel-5.7 eloquent--relationship

我有2个模型及其关联。第一类称为“ Documento”:

class Documento extends Model
{
    protected $table = 'documento';
    protected $primaryKey = 'cod_documento';

    public function emisor()
    {
        return $this->belongsTo('App\Emisor', 'cod_emisor', 'cod_emisor');
    }
}

第二个被称为'Emisor':

class Emisor extends Model
{
    protected $table = 'emisor';
    protected $primaryKey = 'cod_emisor';

    public function documentos()
    {
        return $this->hasMany('App\Documento', 'cod_emisor', 'cod_emisor');
    }
}

模型关系是一对多的(一个发射器有很多文档,而一个文档只有一个发射器)。

在Thinker中,我尝试从文档中获取发射信号,并且效果很好:

>>> Documento::find(1)->emisor->name
=> "Emisor Name"

但是当我尝试在文档中快速加载发射器时,会“失败”:

>>> Documento::find(1)->with('emisor')->count();
=> 94041

我希望得到一个结果,但是查询返回了94041个文档。

为什么会这样?如何获得带有嵌套发光体的一个文档?

1 个答案:

答案 0 :(得分:1)

交换find()with()

$documento = Documento::with('emisor')->find(1);

或使用lazy eager loading

$documento = Documento::find(1)->load('emisor');

使用现有的模型实例:

$documento->load('emisor');

由于Documento::find(1)->with('emisor')创建了一个查询 all Documento条目的新查询,因此您得到了意外的结果。因此,总数为94041