@@ -303,4 +303,79 @@ public function testMorph()
303303 $ this ->assertInstanceOf ('Client ' , $ relations ['imageable ' ]);
304304 }
305305
306+ public function testHasManyHas ()
307+ {
308+ $ author1 = User::create (array ('name ' => 'George R. R. Martin ' ));
309+ $ author1 ->books ()->create (array ('title ' => 'A Game of Thrones ' , 'rating ' => 5 ));
310+ $ author1 ->books ()->create (array ('title ' => 'A Clash of Kings ' , 'rating ' => 5 ));
311+ $ author2 = User::create (array ('name ' => 'John Doe ' ));
312+ $ author2 ->books ()->create (array ('title ' => 'My book ' , 'rating ' => 2 ));
313+ User::create (array ('name ' => 'Anonymous author ' ));
314+ Book::create (array ('title ' => 'Anonymous book ' , 'rating ' => 1 ));
315+
316+ $ authors = User::has ('books ' )->get ();
317+ $ this ->assertCount (2 , $ authors );
318+ $ this ->assertEquals ('George R. R. Martin ' , $ authors [0 ]->name );
319+ $ this ->assertEquals ('John Doe ' , $ authors [1 ]->name );
320+
321+ $ authors = User::has ('books ' , '> ' , 1 )->get ();
322+ $ this ->assertCount (1 , $ authors );
323+
324+ $ authors = User::has ('books ' , '< ' , 5 )->get ();
325+ $ this ->assertCount (3 , $ authors );
326+
327+ $ authors = User::has ('books ' , '>= ' , 2 )->get ();
328+ $ this ->assertCount (1 , $ authors );
329+
330+ $ authors = User::has ('books ' , '<= ' , 1 )->get ();
331+ $ this ->assertCount (2 , $ authors );
332+
333+ $ authors = User::has ('books ' , '= ' , 2 )->get ();
334+ $ this ->assertCount (1 , $ authors );
335+
336+ $ authors = User::has ('books ' , '!= ' , 2 )->get ();
337+ $ this ->assertCount (2 , $ authors );
338+
339+ $ authors = User::has ('books ' , '= ' , 0 )->get ();
340+ $ this ->assertCount (1 , $ authors );
341+
342+ $ authors = User::has ('books ' , '!= ' , 0 )->get ();
343+ $ this ->assertCount (2 , $ authors );
344+
345+ $ authors = User::whereHas ('books ' , function ($ query )
346+ {
347+ $ query ->where ('rating ' , 5 );
348+
349+ })->get ();
350+ $ this ->assertCount (1 , $ authors );
351+
352+ $ authors = User::whereHas ('books ' , function ($ query )
353+ {
354+ $ query ->where ('rating ' , '< ' , 5 );
355+
356+ })->get ();
357+ $ this ->assertCount (1 , $ authors );
358+ }
359+
360+ public function testHasOneHas ()
361+ {
362+ $ user1 = User::create (array ('name ' => 'John Doe ' ));
363+ $ user1 ->role ()->create (array ('title ' => 'admin ' ));
364+ $ user2 = User::create (array ('name ' => 'Jane Doe ' ));
365+ $ user2 ->role ()->create (array ('title ' => 'reseller ' ));
366+ User::create (array ('name ' => 'Mark Moe ' ));
367+ Role::create (array ('title ' => 'Customer ' ));
368+
369+ $ users = User::has ('role ' )->get ();
370+ $ this ->assertCount (2 , $ users );
371+ $ this ->assertEquals ('John Doe ' , $ users [0 ]->name );
372+ $ this ->assertEquals ('Jane Doe ' , $ users [1 ]->name );
373+
374+ $ users = User::has ('role ' , '= ' , 0 )->get ();
375+ $ this ->assertCount (1 , $ users );
376+
377+ $ users = User::has ('role ' , '!= ' , 0 )->get ();
378+ $ this ->assertCount (2 , $ users );
379+ }
380+
306381}
0 commit comments