eager-loading 相关问题

预先加载是一种在同一请求中加载某个类的对象和多个命名关联的方法。

Laravel - 渴望加载多态关系的相关模型

我可以立即加载多态关系/模型,而不会出现任何 n+1 问题。但是,如果我尝试访问与多态模型相关的模型,则会出现 n+1 问题,并且我似乎无法找到解决方案。哈...

回答 6 投票 0

Laravel Eloquent:从子查询创建自定义属性

模态:Subscription.php 类订阅扩展模型{ 使用 HasFactory; 公共函数 payment(): HasMany { 返回 $this->hasMany(SubscriptionPayment::class, 'sub_id'); }

回答 1 投票 0

Laravel - 自定义中间表模型 - 急切加载

这是我当前的设置: 这是我当前的设置: <?php namespace App\Models; use Exception; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class Employee extends Model { protected $table = 'employees'; protected $fillable = [ 'first_name', 'last_name', 'gender', 'birthdate', 'nationality_id', 'company_id', ]; public function positions(): BelongsToMany { return $this->belongsToMany(Position::class) ->using(EmployeePosition::class); } } <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class Position extends Model { protected $table = 'positions'; protected $fillable = [ 'name', ]; public function employees(): BelongsToMany { return $this->belongsToMany(Employee::class) ->using(EmployeePosition::class); } } 它们通过数据透视表相互连接,根据文档将其配置为“自定义中间表模型”。 我设置了以下列: | id | employee_id | position_id | <?php namespace App\Models; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasManyThrough; use Illuminate\Database\Eloquent\Relations\Pivot; class EmployeePosition extends Pivot { /** * Indicates if the IDs are auto-incrementing. * * @var bool */ public $incrementing = true; protected $table = 'employee_position'; } 有了$employee,到目前为止一切正常: $employee->load('positions') 接下来,我还创建了一个employee_position_technologies表: <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class EmployeePositionTechnology extends Model { protected $table = 'employee_position_technologies'; protected $fillable = [ 'employee_position_id', 'technology_id', ]; } 我想给“员工职位”分配很多“技术”。 我也做到了。 现在,我想要实现的是将技术相应地加载到员工职位上: $employee->load('positions.technologies') 为此,我修改了 EmployeePosition 类,添加了 technologies() 方法,如下所示: public function technologies() { return $this->hasManyThrough( Technology::class, EmployeePositionTechnology::class, 'employee_position_id', 'id', 'position_id', 'technology_id' ); } 这不起作用,因为 technologies() 方法似乎是从 Position 模型。 我发现要访问“中间表模型”,我们必须使用以下命令: $employee->position->pivot->technologies 所以我尝试了: $employee->load('positions.pivot.technologies'); 这似乎也不起作用,有错误 Call to undefined relationship [pivot] on model [App\Models\Position]. 接下来,虽然我不喜欢,但我尝试了: $employee->load('positions'); $employee->positions->each(function ($position) { $position->pivot->load('technologies'); }); 这似乎有效,我可以访问该方法,但 technologies 的结果 position 关系为空。 我尝试转储查询,它似乎是正确的: select * from "technologies" inner join "employee_position_technologies" on "employee_position_technologies"."technology_id" = "technologies"."id" where "employee_position_technologies"."employee_position_id" = ? 我错过了什么? 您是否尝试过使用 with() 方法代替 load() 方法来急切加载您要加载的关系?您可以使用 with 关键字来实现此目的,如下所示,其中关系作为参数传递给 with 方法 $employee->positions()->with('technologies')->get(); 这将返回为该员工找到的所有职位以及每个职位的相关技术(如果有)。您可以从 Laravel 官方网站阅读更多有关使用 with 方法进行预加载的信息

回答 1 投票 0

在 Laravel 中访问关系内部的模型属性在急切加载时返回 null

在 Laravel 中的关系逻辑中访问模型属性时,急切加载时属性全部为空,如果延迟加载则工作正常。 型号关系: 公共职能组织() {

回答 1 投票 0

Nhibernate - 分页和预加载实体

我有两个实体,一个团队和一个员工。 我想要一份拥有热切的团队的员工名单。该列表必须分页。 公共 PagedList GetAllEmployeesWithEagerLoadedTeams...

回答 1 投票 0

如何在 Laravel 中使用更改的列值建立关系

这是我在 StackOverflow 上的第一个问题。我来这里是因为我试图在 Laravel 中建立一种特殊的关系。我希望能够做出这样的东西 公共函数游戏() {...

回答 1 投票 0

使用 Entity Framework Core 的最小 API - 由于数据库中的图像而导致性能不佳

我正在使用 Entity Framework Core 为 ASP.NET Core v8 Minimal API 编写 API。端点之一应该获取特定项目组中的所有项目。这些项目位于两个表中...

回答 1 投票 0

嵌套关系和自定义访问器的预加载会导致性能问题

我正在使用 Laravel 10 开发一个应用程序,并且面临与急切加载嵌套关系和自定义访问器相关的性能问题。 设想: 我有三个模型:User、Post 和

回答 1 投票 0

withQueryString() 不适用于急切加载和分页

我正在尝试对 $users 使用 withQueryString() $users = $usersQuery->分页(10); 像这样 $users = $usersQuery->paginate(10)->withQueryString(); 但我收到错误“未定义的方法

回答 1 投票 0

Laravel 关系无法通过属性的方法加载

我有3张桌子的合同、细节和额外的。 每个合约都有一个详细信息,其中的外键名为contractId,位于详细信息表中。 每个细节都有 5 列,来自名为 Color 的额外表,... 我

回答 1 投票 0

如何在 EF Core 预加载中包含每个层次结构的表属性

考虑以下模型类: 公共抽象类A { 公共枚举 T { B_, C_, D_ } 公共 int Id { 得到;放; } 公共整数?父级 ID { 获取;放; } 公共A?父级 { 得到; ...

回答 1 投票 0

通过多个选择进行急切获取,但没有 FetchType.EAGER 注释

我想在某些用例中急切地获取一对多列表(但并非总是如此,所以 @OneToMany(fetch=FetchType.EAGER) 不会很好),并且我也希望 JPA 使用单独的SQL 选择获取那些 Lis...

回答 2 投票 0

如何将 eager_load 和 select 一起使用?

我试图使用 eager_load 仅选择某些列,但我面临着它取消我的“选择”的问题。 模型: 课程时间表 < ActiveRecord::Base belongs_to :timeline_category,

回答 3 投票 0

eager_load=true有什么影响?

我需要知道为什么在非生产环境中 eager_load 首选为 false?我听说过的一个论点是 eager_load eager 加载了我体内的大部分 Rails 和应用程序......

回答 2 投票 0

Spring FetchType.Lazy 和投影抛出错误

我试图将我所有的数据库变成延迟加载,因为它太大了(像数百万), 为了不加载所有内容,我应用了惰性,并开始进行 Spring Projections, 然后,在项目中...

回答 1 投票 0

EF Core 8:从祖父母那里得到孙子

我正在编写一个应用程序,其中包含具有以下导航属性的模型类 测试报告 => 学生 => 课程表 => 测试 该关系是一对多的

回答 1 投票 0

Laravel 路由模型绑定与排序的预加载?

我有产品也有评论。该评论可以投票,并且评论也可以有子评论。评论通过预先加载 $with 来加载,该 $with 在产品模型中定义...

回答 2 投票 0

C# Entity Framework Core 3.1 显式加载多个关系导致笛卡尔爆炸,如何拆分查询?

我在生产环境中遇到了扩展问题。少量记录处理良好。但体积越大,花费的时间就越长。这些课程只是为了说明这一点。 聚会{...

回答 1 投票 0

在实体上显式加载多个引用/集合

考虑以下实体模型: 公开课家长 { 公共虚拟 FirstChild FirstChild { 获取;放; } 公共虚拟 SecondChild SecondChild { 获取;放; } } 在我的代码中,我已经加载了...

回答 2 投票 0

laravel 急切加载函数不返回关系,但单独工作

我有以下型号 我有以下型号 <?php namespace App\Models\Masters\System; class UserActivationCode extends \Illuminate\Database\Eloquent\Model { public $table = "user_activation_codes"; } <?php namespace App\Models; use App\Models\Model; use Modules\Requests\Models\EmploymentLeaveType; use App\Models\Masters\System\UserActivationCode; class EmployeeEmployment extends \Illuminate\Database\Eloquent\Model { public $table = "employee_employments"; public function employeeProfileScore() { return $this->hasOne('\App\Models\EmployeeProfileScore', 'employee_id', 'employee_id'); } public function test() { return $this->hasMany(UserActivationCode::class, 'employment_id', 'id'); } } 当我运行以下命令时 $emp = \App\Models\EmployeeEmployment::with('test')->whereIn('id', ["4228e839-5ce3-4798-acfd-68958fed3b82"])->first(); $emp->test; 结果是空数组 但是当我运行时不使用它会返回数据 $emp = \App\Models\EmployeeEmployment::whereIn('id', ["4228e839-5ce3-4798-acfd-68958fed3b82"])->first(); $emp->test; 我从模型中删除了所有内容,将其转换为基本状态 在查询中,我运行以下查询,我无法理解为什么雇佣_id 为 0 检查您的测试关系是如何加载的。外键与数据库中设置的内容之间是否可能不匹配?确保 user_activation_codes 表中的雇佣_id 和 id 在数据库中具有相同的类型(如果您使用 UUID,则均为 UUID)。

回答 1 投票 0

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