[英]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.