[英]Larave BelongsTo relationship returns null
我有两个 Eloquent 型号:
1)项目:
class Project extends Model
{
protected $table = 'projects';
protected $fillable = ['id', 'user_id', 'account_id'];
public function user(){
return $this->belongsTo(User::class);
}
public function account()
{
return $this->belongsTo(Account::class, "account_id");
}
2) 账户:
class Account extends Model
{
// ...
public function projects(){
return $this->hasMany(Project::class);
}
目标是返回项目的帐户:
Project::with("account")->get()->pluck("account");
结果:
null
那么每个项目都有一个帐户,当你这样做时
Project::with('account')->get()
这意味着您将使用他们的帐户获得项目,并且某些项目可能还没有帐户在这种情况下,当您尝试获得帐户时,您将获得 null
$projects = Project::with('account')->get();
$projects->first()->account
(这里你不确定 account 是否存在)
Project::whereHas('account')->get()
这个只会得到拥有账户的项目
你写的这行代码, Project::with("account")->get()->pluck("account");
当您运行它时,如果您有多个项目使用他们的帐户并且有些没有帐户,您的结果将是这样的
App\Account..
App\Account..
null
null
App\Account..
如果您喜欢使用您的代码,您需要使用集合过滤器进行过滤,然后提取帐户以跳过 null 帐户(不推荐)
Project::with("account")
->get()
->filter(fn($project) => $project->account);
->pluck("account");
你不能做这样的事情:
$projects = Project::all();
$projects->each(function($project) {
echo $project->account
})
你为什么不用这个? 您的查询没有任何条件,所以直接获取所有账户
Account::all();
如果你有条件,你可以使用它;
Account::whereHas('projects', function($query){
$query->where('user_id', 1); //projects' user_id
})->get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.