php - 如何在 Eloquent 中创建后立即加载关系

标签 php eloquent relationship eager-loading

我在我的应用程序中使用 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/

相关文章:

javascript - 使用动态 DOM 通过 keyup 将 .val 添加到右侧输入

php - Laravel Nova - 如何在创建新记录时过滤 BelongsTo 字段选择?

php - Laravel 5 全局日期访问器

performance - FK 上的联接是否比没有 FK 的联接更快?

php - 最佳实践ajax随机加载更多图像(内容)

php - 通过 Tumblr API 上传多张图片

php - 通过android使用php更新mysql数据库

php - 如何在 Eloquent withCount 函数回调中获取数据透视数据?

r - 如何绘制 R 中的关系?

javascript - EmberJS - 根据异步关系计算