Php 如何在有说服力的创作后立即加载关系
我正在我的应用程序中使用php slim3框架和雄辩的orm。 我一直对雄辩的关系感到困惑 我想用创建时的关系填充我的对象 假设我有一个公司和用户模型 用户有Php 如何在有说服力的创作后立即加载关系,php,eloquent,relationship,eager-loading,Php,Eloquent,Relationship,Eager Loading,我正在我的应用程序中使用php slim3框架和雄辩的orm。 我一直对雄辩的关系感到困惑 我想用创建时的关系填充我的对象 假设我有一个公司和用户模型 用户有公司方法,公司也有用户方法。 这两种方法都描述得很好 //User.php company() { return $this->belongsTo('Company'); } //Company.php users() { return $this->hasMany('User'); } 而不是我想创建一个
公司
方法,公司也有用户
方法。
这两种方法都描述得很好
//User.php
company()
{
return $this->belongsTo('Company');
}
//Company.php
users()
{
return $this->hasMany('User');
}
而不是我想创建一个有用户的新公司
function doSomething(array $data)
{
$company= new Company();
//fill it
//...
$users = [];
foreach ($data['user_emails'] as $email)
{
$users[] = new User(['email' => $email]);
}
$company->users()->saveMany($users);
$company->save();
return $company();
}
$company = doSomething(['emails'] => ['foo@mail.com', 'buz@mail.com']);
//rely on build in to Model toString that uses json serialization
echo $company;
在本例中,将保存公司和关系-它可以工作
但在公司内部,json将仅限于公司
我也希望在用户中看到它
如果我已经有了这家公司,我可以将与
echo Company::query()->with('user')->get();
但我确实有我需要的所有数据-无需再次从数据库中重新获取它。
有没有一种方法可以在创建后立即将公司和相关用户一起返回?找到了一种棘手的方法
在从doSomething
方法返回之前手动启动关系
$company->setRelation('users', new Collection($users));
看起来不明显而且狡猾
如果还有其他方法可以找到我的案例,请给出建议?我知道这个答案非常古老,但我在搜索类似的东西时偶然发现了这个答案 我认为最好的方法是使用lazy-eager加载,或者(如果您只想在尚未加载的情况下加载) 因此,在您的示例中,您可以:
return $company->load('users');