laravel-5 - 在 Eloquent 模型中使用急切加载的问题
问题描述
我有 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"
但是当我尝试在文档中执行 Eager Loading the emisor 时,“失败”:
>>> Documento::find(1)->with('emisor')->count();
=> 94041
我期望一个结果,但查询返回 94041 个文档。
为什么会这样?如何获得一个带有嵌套发射器的文档?
解决方案
交换find()
和with()
:
$documento = Documento::with('emisor')->find(1);
或者使用延迟加载:
$documento = Documento::find(1)->load('emisor');
使用现有模型实例:
$documento->load('emisor');
您会得到这个意外结果,因为Documento::find(1)->with('emisor')
创建了一个查询所有 Documento
条目的新查询。因此 的总数94041
。
推荐阅读
- python - 如何禁用 discord.py 记录器?
- xamarin.forms - Xamarin.Forms 中的正确 Page.Loaded 事件
- python - Elasticsearch 父子映射和索引
- c - CS50 Luhn's Algorithm in C. 非常感谢帮助:)
- javascript - 使用 javascript 显示 Youtube 缩略图
- java - 将数组转换为数组索引到值的映射
- loops - Arduino循环随机时间
- python - 将 pandas 系列以 '_' 分隔的字符串拆分为可变数量的字段,填充缺失的字段
- excel - 如何从变量 VBA 获取单元格地址
- flask - Flask WTF form with FormFields - multiple csrf tokens