EloquentHasOneOfManyTest.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace Illuminate\Tests\Integration\Database\EloquentHasOneOfManyTest;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Illuminate\Support\Facades\Schema;
  5. use Illuminate\Tests\Integration\Database\DatabaseTestCase;
  6. class EloquentHasOneOfManyTest extends DatabaseTestCase
  7. {
  8. protected function defineDatabaseMigrationsAfterDatabaseRefreshed()
  9. {
  10. Schema::create('users', function ($table) {
  11. $table->id();
  12. });
  13. Schema::create('logins', function ($table) {
  14. $table->id();
  15. $table->foreignId('user_id');
  16. });
  17. }
  18. public function testItOnlyEagerLoadsRequiredModels()
  19. {
  20. $this->retrievedLogins = 0;
  21. User::getEventDispatcher()->listen('eloquent.retrieved:*', function ($event, $models) {
  22. foreach ($models as $model) {
  23. if (get_class($model) == Login::class) {
  24. $this->retrievedLogins++;
  25. }
  26. }
  27. });
  28. $user = User::create();
  29. $user->latest_login()->create();
  30. $user->latest_login()->create();
  31. $user = User::create();
  32. $user->latest_login()->create();
  33. $user->latest_login()->create();
  34. User::with('latest_login')->get();
  35. $this->assertSame(2, $this->retrievedLogins);
  36. }
  37. }
  38. class User extends Model
  39. {
  40. protected $guarded = [];
  41. public $timestamps = false;
  42. public function latest_login()
  43. {
  44. return $this->hasOne(Login::class)->ofMany();
  45. }
  46. }
  47. class Login extends Model
  48. {
  49. protected $guarded = [];
  50. public $timestamps = false;
  51. }