Laravel 模型关系也会自动获取所有其他模型关系
Laravel Model Relations fetch automatically all other model relations too
我希望有人能帮助我。
我有 3 个模型,例如用户、任务和子任务。
这些已经通过 hasOne 或 hasMany 链接。
一切正常。
现在我通过 Task::where(..)->with(['user','subtask'])... 调用数据并得到相应的结果。
问题是 Subtask 有一个 User 的引用,我在使用任务模型时没有得到查询到的用户信息。
如果我使用子任务模型,我会得到用户信息。
如何设置所有对查询模型的引用也同时从数据库中查询?
一次要return个关系数据,可以使用以下机制:
$Data = $Task::where(...)
->with([
'user'=>function($userQuery){
// mechanism is recursive; you can extend it to infinity :)
$userQuery->with([
'other',
'relationships',
'here'=>function($hereQuery){ ... }
]);
},
'subTask',
'anotherRelationship' => function($anotherRelationship) {
$anotherRelationship->select('column');
$anotherRelationship->where('column2', 'whatever');
}
])
->get();
// dump data
dd($Data);
我不知道你是否正在寻找这个——如果你想在模型实例化后加载一些关系,你可以在你的模型代码中附加一个魔法变量 $with
并指定哪个您要加载的关系:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Task extends Model
{
protected $fillable = ['col1', 'col2', 'col3', ...];
// specify which relationships you want to load automatically
protected $with = [
'users',
'anotherRelationship'=>function($anotherRelationshipQuery){
$anotherRelationshipQuery->select( ... );
},
'andSomeOtherRelationship'
...
];
...
}
现在您不再需要在检索数据时手动加载关系。它们是自动加载的:
$Data = $Tast::where( ... )->get();
dd($Data);
我希望有人能帮助我。
我有 3 个模型,例如用户、任务和子任务。 这些已经通过 hasOne 或 hasMany 链接。 一切正常。 现在我通过 Task::where(..)->with(['user','subtask'])... 调用数据并得到相应的结果。
问题是 Subtask 有一个 User 的引用,我在使用任务模型时没有得到查询到的用户信息。
如果我使用子任务模型,我会得到用户信息。
如何设置所有对查询模型的引用也同时从数据库中查询?
一次要return个关系数据,可以使用以下机制:
$Data = $Task::where(...)
->with([
'user'=>function($userQuery){
// mechanism is recursive; you can extend it to infinity :)
$userQuery->with([
'other',
'relationships',
'here'=>function($hereQuery){ ... }
]);
},
'subTask',
'anotherRelationship' => function($anotherRelationship) {
$anotherRelationship->select('column');
$anotherRelationship->where('column2', 'whatever');
}
])
->get();
// dump data
dd($Data);
我不知道你是否正在寻找这个——如果你想在模型实例化后加载一些关系,你可以在你的模型代码中附加一个魔法变量 $with
并指定哪个您要加载的关系:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Task extends Model
{
protected $fillable = ['col1', 'col2', 'col3', ...];
// specify which relationships you want to load automatically
protected $with = [
'users',
'anotherRelationship'=>function($anotherRelationshipQuery){
$anotherRelationshipQuery->select( ... );
},
'andSomeOtherRelationship'
...
];
...
}
现在您不再需要在检索数据时手动加载关系。它们是自动加载的:
$Data = $Tast::where( ... )->get();
dd($Data);