我在我的应用程序中使用 php slim3 fraemwork 和 eloquent orm。 我对 Eloquent 关系加载感到困惑..
我想用创建关系填充我的对象
假设我有一个 Company 和 User 模型
User 有 company
方法,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');
关于php - 如何在 Eloquent 中创建后立即加载关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39105911/