@@ -307,8 +307,57 @@ public function testHasManyMinimalSQL(): void
307307 ],
308308 ])
309309 ->toArray ();
310- $ this ->assertEqualsEntities ($ cakeEntities , $ actual );
311- //static::assertEquals($cakeEntities, $actual);
310+ static ::assertEquals ($ cakeEntities , $ actual );
311+ }
312+
313+ public function testHasManyFirst (): void
314+ {
315+ /** @var \Bancer\NativeQueryMapperTest\TestApp\Model\Table\ArticlesTable $ArticlesTable */
316+ $ ArticlesTable = $ this ->fetchTable (ArticlesTable::class);
317+ $ stmt = $ ArticlesTable ->prepareNativeStatement ("
318+ SELECT
319+ a.id AS Articles__id,
320+ title AS Articles__title,
321+ c.id AS Comments__id,
322+ article_id AS Comments__article_id,
323+ content AS Comments__content
324+ FROM articles AS a
325+ LEFT JOIN comments AS c ON a.id=c.article_id
326+ WHERE a.id=1
327+ " );
328+ $ actual = $ ArticlesTable ->mapNativeStatement ($ stmt )->first ();
329+ static ::assertInstanceOf (Article::class, $ actual );
330+ $ actualComments = $ actual ->get ('comments ' );
331+ static ::assertIsArray ($ actualComments );
332+ static ::assertCount (2 , $ actualComments );
333+ static ::assertInstanceOf (Comment::class, $ actualComments [0 ]);
334+ $ expected = [
335+ 'id ' => 1 ,
336+ 'title ' => 'Article 1 ' ,
337+ 'comments ' => [
338+ [
339+ 'id ' => 1 ,
340+ 'article_id ' => 1 ,
341+ 'content ' => 'Comment 1 ' ,
342+ ],
343+ [
344+ 'id ' => 2 ,
345+ 'article_id ' => 1 ,
346+ 'content ' => 'Comment 2 ' ,
347+ ],
348+ ],
349+ ];
350+ static ::assertEquals ($ expected , $ actual ->toArray ());
351+ $ cakeEntity = $ ArticlesTable ->find ()
352+ ->select (['Articles.id ' , 'Articles.title ' ])
353+ ->contain ([
354+ 'Comments ' => [
355+ 'fields ' => ['Comments.id ' , 'Comments.article_id ' , 'Comments.content ' ],
356+ ],
357+ ])
358+ ->where (['Articles.id ' => 1 ])
359+ ->first ();
360+ static ::assertEquals ($ cakeEntity , $ actual );
312361 }
313362
314363 public function testBelongsTo (): void
0 commit comments