我在我的应用程序中使用php slim3框架和雄辩的形式。我对雄辩的关系感到困惑……
我想在创建时用关系填充我的对象
假设我有一个Company和User模型用户有company
方法,公司也有users
方法。两种方法的描述都很恰当
//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将是公司仅我希望用户也能看到它
如果我已经有了这个公司,我可以使用with
echo Company::query()->with('user')->get();
但是我已经有了我需要的所有数据-不需要再次从数据库中重新获取它。是否有办法在公司创建后立即返回相关用户?
我知道这个答案真的很老,但是我在搜索类似的东西时偶然发现了这个…
我认为最好的方法是使用延迟急切加载,与load()或loadMissing()(如果你想加载只有当他们还没有加载)。
那么,在你的例子中,你可以这样做:
return $company->load('users');
找到了一个棘手的方法在从doSomething
方法返回之前手动启动关系。
$company->setRelation('users', new Collection($users));
看起来不明显和棘手
请告知是否有其他方式可以到达我的箱子?