利用Laravel 的Eloquent ORM 中的「with()」函數從多個表中取得相關資料時,您可能會遇到只需要第二個表中的特定列的情況。本文深入探討如何在不借助查詢產生器的情況下實現此目的。
考慮這樣的場景:您有兩個表“User”和“Post”,它們之間具有一對多關係。在您的User 模型中,您定義與Post 模型的「hasMany」關係:
public function post() { return $this->hasmany('post'); }
同樣,在Post 模型中,您與User 模型建立「belongsTo」關係:
public function user() { return $this->belongsTo('user'); }
但是,當您使用「with()」函數連接這兩個表時,您可能會注意到它預設選擇第二個表中的所有欄位。假設您只想從“User”表中檢索特定列,例如“id”和“username”。以下程式碼片段還不夠:
Post::query() ->with('user') ->get();
要實現您的目標,您可以傳遞一個閉包函數作為傳遞給「with()」函數的數組的第二個索引:
Post::query() ->with(['user' => function ($query) { $query->select('id', 'username'); }]) ->get()
此閉包可讓您指定從第二個表中檢索哪些欄位。在這種情況下,它只會從“User”表中選擇“id”和“username”列。
注意:如答案中所提到的,主鍵(「id」 " 在這種情況下)必須是$query->select() 方法中的第一個參數,以確保正確的結果檢索。
以上是如何在 Laravel 雄辯的 `with()` 函數中選擇特定列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!