我有三個模型User,Post和Comment。User和Post處于一對多關系中, 和 也是User如此Comment。就本示例而言,不存在Post-Comment關系。
當我運行以下查詢時
User::withCount(['posts', 'comments'])->get()
我得到了預期的結果:
[
...
App\Models\User {#3459
id: 18,
username: "Foo",
created_at: "2021-12-08 11:38:39",
updated_at: "2021-12-08 11:38:39",
posts_count: 5,
comments_count: 15,
}
...
]
我想從結果模型中洗掉時間戳。我嘗試將我想要的欄位陣列作為引數get(如->get(['username', 'posts_count', 'comments_count']),但結果根本沒有改變。
我也嘗試用 替換get(...),select(...)->get()但這會產生此錯誤:
Illuminate\Database\QueryException with message
'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'posts_count' in 'field list'
(SQL: select `username`, `posts_count`, `comments_count` from `users`)'
我認為這是由于聚合函式尚未執行。
所以我想出了這個解決方案
$usersWithCounts = User::withCount(['posts', 'comments'])->get()
->map(function ($item, $key) {
return $item->only(['username', 'posts_count', 'comments_count']);
});
但感覺不對:回傳的集合不再由 Eloquent 模型組成,只是簡單的陣列。
[
...
[
username: "Foo",
posts_count: 5,
comments_count: 15,
]
...
]
正確的處理方式是什么?
uj5u.com熱心網友回復:
以下代碼可能適合您的需求:
class User extends Model
{
protected $hidden = ['created_at', 'updated_at'];
}
uj5u.com熱心網友回復:
是的,您肯定使用上述方法過濾收集資料。另一種方法是使用集合的忘記(),使用鍵從集合中洗掉值。
有關更多資訊,請參閱以下鏈接
忘記收集方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/417485.html
標籤:
上一篇:如何使用bash按順序比較1000個檔案-1到2、2到3等等
下一篇:資產沒有在laravel中被決議
