77use Illuminate \Database \SQLiteConnection ;
88use Illuminate \Support \Facades \DB ;
99use MongoDB \Laravel \Tests \Models \Book ;
10+ use MongoDB \Laravel \Tests \Models \Photo ;
1011use MongoDB \Laravel \Tests \Models \Role ;
1112use MongoDB \Laravel \Tests \Models \SqlBook ;
13+ use MongoDB \Laravel \Tests \Models \SqlPhoto ;
1214use MongoDB \Laravel \Tests \Models \SqlRole ;
1315use MongoDB \Laravel \Tests \Models \SqlUser ;
1416use MongoDB \Laravel \Tests \Models \User ;
@@ -29,13 +31,18 @@ public function setUp(): void
2931 SqlUser::executeSchema ();
3032 SqlBook::executeSchema ();
3133 SqlRole::executeSchema ();
34+ SqlPhoto::executeSchema ();
3235 }
3336
3437 public function tearDown (): void
3538 {
3639 SqlUser::truncate ();
3740 SqlBook::truncate ();
3841 SqlRole::truncate ();
42+ SqlPhoto::truncate ();
43+ Photo::truncate ();
44+ Book::truncate ();
45+ User::truncate ();
3946 }
4047
4148 public function testSqlRelations ()
@@ -210,4 +217,63 @@ public function testHybridWith()
210217 $ this ->assertEquals ($ user ->id , $ user ->books ->count ());
211218 });
212219 }
220+
221+ public function testHybridMorphToMongoDB (): void
222+ {
223+ $ user = SqlUser::create (['name ' => 'John Doe ' ]);
224+
225+ $ photo = Photo::create (['url ' => 'http://graph.facebook.com/john.doe/picture ' ]);
226+ $ photo = $ user ->photos ()->save ($ photo );
227+
228+ $ this ->assertEquals (1 , $ user ->photos ->count ());
229+ $ this ->assertEquals ($ photo ->id , $ user ->photos ->first ()->id );
230+
231+ $ user = SqlUser::find ($ user ->id );
232+ $ this ->assertEquals (1 , $ user ->photos ->count ());
233+ $ this ->assertEquals ($ photo ->id , $ user ->photos ->first ()->id );
234+
235+ $ book = SqlBook::create (['title ' => 'Game of Thrones ' ]);
236+ $ photo = Photo::create (['url ' => 'http://graph.facebook.com/gameofthrones/picture ' ]);
237+ $ book ->photo ()->save ($ photo );
238+
239+ $ this ->assertNotNull ($ book ->photo );
240+ $ this ->assertEquals ($ photo ->id , $ book ->photo ->id );
241+
242+ $ book = SqlBook::where ('title ' , $ book ->title )->get ()->first ();
243+ $ this ->assertNotNull ($ book ->photo );
244+ $ this ->assertEquals ($ photo ->id , $ book ->photo ->id );
245+
246+ $ photo = Photo::first ();
247+ $ this ->assertEquals ($ photo ->hasImage ->name , $ user ->name );
248+ }
249+
250+ public function testHybridMorphToSql (): void
251+ {
252+ $ user = User::create (['name ' => 'John Doe ' ]);
253+
254+ $ photo = SqlPhoto::create (['url ' => 'http://graph.facebook.com/john.doe/picture ' ]);
255+ $ photo ->save ();
256+ $ photo = $ user ->photos ()->save ($ photo );
257+
258+ $ this ->assertEquals (1 , $ user ->photos ->count ());
259+ $ this ->assertEquals ($ photo ->id , $ user ->photos ->first ()->id );
260+
261+ $ user = User::find ($ user ->id );
262+ $ this ->assertEquals (1 , $ user ->photos ->count ());
263+ $ this ->assertEquals ($ photo ->id , $ user ->photos ->first ()->id );
264+
265+ $ book = Book::create (['title ' => 'Game of Thrones ' ]);
266+ $ photo = SqlPhoto::create (['url ' => 'http://graph.facebook.com/gameofthrones/picture ' ]);
267+ $ book ->photo ()->save ($ photo );
268+
269+ $ this ->assertNotNull ($ book ->photo );
270+ $ this ->assertEquals ($ photo ->id , $ book ->photo ->id );
271+
272+ $ book = Book::where ('title ' , $ book ->title )->get ()->first ();
273+ $ this ->assertNotNull ($ book ->photo );
274+ $ this ->assertEquals ($ photo ->id , $ book ->photo ->id );
275+
276+ $ photo = SqlPhoto::first ();
277+ $ this ->assertEquals ($ photo ->hasImage ->name , $ user ->name );
278+ }
213279}
0 commit comments