在Eloquent模型中使用Eager Loading的问题

问题描述 投票:0回答:1

我有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');
    }
}

模型关系是一对多的(一个emisor有很多文档,一个文档只有一个emisor)。

在Thinker中,我尝试从文档中获取一个emisor并且这项工作很好:

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

但是,当我尝试在文档中执行Eager加载emisor时,“失败”:

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

我期待一个结果,但查询返回94041文档。

为什么会这样?如何使用嵌套的emisor获取一个文档?

laravel-5 eloquent eager-loading laravel-5.7 eloquent--relationship
1个回答
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')创建了一个查询所有Documento条目的新查询。因此94041的总数。

© www.soinside.com 2019 - 2024. All rights reserved.