Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在有说服力的创作后立即加载关系_Php_Eloquent_Relationship_Eager Loading - Fatal编程技术网

Php 如何在有说服力的创作后立即加载关系

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'); } 而不是我想创建一个

我正在我的应用程序中使用php slim3框架和雄辩的orm。 我一直对雄辩的关系感到困惑

我想用创建时的关系填充我的对象

假设我有一个公司和用户模型 用户有
公司
方法,公司也有
用户
方法。 这两种方法都描述得很好

//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');