$users = User::all();
$user = User::find(1)->get();
$sameUser = User::find(1)->with('roles')->get();
$user->is($sameUser) // true
$users->contains($user) // true
$users->contains($sameUser) // false
難道不應該爲所有三個檢查返回true?
$users = User::all();
$user = User::find(1)->get();
$sameUser = User::find(1)->with('roles')->get();
$user->is($sameUser) // true
$users->contains($user) // true
$users->contains($sameUser) // false
難道不應該爲所有三個檢查返回true?
這並不是說它不與關係一起工作,而是因爲調用get()
調用而導致混亂。 find()
返回用戶的實例和引擎蓋下實際調用User::where('id', '=', $id)->first();
所以以下所有將返回true:
$users = User::all();
$user = User::find(1);
$sameUser = User::with('roles')->find(1);
$user->is($sameUser)
$users->contains($user)
$users->contains($sameUser)
https://github.com/laravel/framework/issues/18902
技術上的對象是不一樣的,如果一個人渴望加載 關係,而另一個則沒有。雖然它們可能代表數據庫中的同一行,但PHP無法知道這一點。
在這種情況下,您可能會根據您的主鍵執行此操作。
Nah它仍然返回false,查詢不是問題:https://github.com/laravel/framework/issues/18902 – DanVeira