簡體   English   中英

Larave BelongsTo 關系返回 null

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM