Laravel with()仅适用于第一条记录(仅适用于ID为1的记录)

时间:2019-01-10 20:49:30

标签: php mysql database laravel foreign-keys

想象一下在laravel User Eloquent模型中我具有这种关系函数的情况:

public function serviceProvider(){
    return $this->belongsTo('App\Http\Models\Users\ServiceProvider');
}

public function company(){
    return $this->serviceProvider->company();
}

在serviceProvider模型中我有这种关系:

public function company()
{
    return $this->morphOne('App\Http\Models\Companies\Company', 'companyable');
}

现在在控制器中,我这样写:

User::where('status', '=', 1)->with('company')->get();

我知道这听起来很疯狂,但它仅适用于用户id = 1,的记录,而其余记录仅返回company : null

我不知道这是怎么回事,也许我做错了什么?有什么问题吗?

如果我写这样的东西:$user->company,它可以工作,它对每个用户都有效,我的意思是

$user = User::where('id', '=', "any id")->first;

with()就是问题所在

1 个答案:

答案 0 :(得分:1)

这有点公平,我有点惊讶。

由于您与User建立了serviceProvider关系,并且与company有关系,因此您在{{1}中无需建立company关系}。

如果您想渴望/延迟加载嵌套关系,则可以使用点表示法,例如。

User

Lazy load docs (scroll down to Nested Eager Loading)