@@ -303,4 +303,79 @@ public function testMorph()
303
303
$ this ->assertInstanceOf ('Client ' , $ relations ['imageable ' ]);
304
304
}
305
305
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
+
306
381
}
0 commit comments