LARAVEL Получение 2 одинаковых столбцов - PullRequest
1 голос
/ 03 апреля 2020

У меня есть таблица с животными, а другая - с изображениями животных (id_image, id_animal).

Проблема в том, что когда я делаю это:

$animales = DB::table('animals')
->orderBy('date_found')
->join('images','images.id_animal','animals.id')
->limit(6)
->get();

Когда Я делаю, что он возвращает одно и то же животное для каждого изображения, которое имеет. Это проблема, потому что когда я показываю всех животных, он показывает одно и то же несколько раз Example

Что я могу сделать? Я пытался использовать группу, но она не работает.

Спасибо!

 [1]=>
    object(stdClass)#348 (15) {
      ["id"]=>
      int(5)
      ["id_user"]=>
      NULL
      ["race"]=>
      string(7) "Mestizo"
      ["species"]=>
      string(6) "Canina"
      ["gender"]=>
      string(5) "Macho"
      ["date_of_birth"]=>
      string(10) "2017-01-19"
      ["description"]=>
      string(54) "Un perrito muy bonito y pequeño que busca una familia"
      ["health"]=>
      string(8) "Muy bien"
      ["nickname"]=>
      string(6) "Tudels"
      ["place_found"]=>
      string(8) "Valencia"
      ["size"]=>
      string(7) "Mediano"
      ["date_found"]=>
      string(10) "2017-03-01"
      ["condition"]=>
      NULL
      ["id_animal"]=>
      int(1)
      ["url"]=>
      string(18) "/img/animals/7.jpg"
    }
    [2]=>
    object(stdClass)#347 (15) {
      ["id"]=>
      int(1)
      ["id_user"]=>
      NULL
      ["race"]=>
      string(7) "Mestizo"
      ["species"]=>
      string(6) "Canina"
      ["gender"]=>
      string(5) "Macho"
      ["date_of_birth"]=>
      string(10) "2017-01-19"
      ["description"]=>
      string(54) "Un perrito muy bonito y pequeño que busca una familia"
      ["health"]=>
      string(8) "Muy bien"
      ["nickname"]=>
      string(6) "Tudels"
      ["place_found"]=>
      string(8) "Valencia"
      ["size"]=>
      string(7) "Mediano"
      ["date_found"]=>
      string(10) "2017-03-01"
      ["condition"]=>
      NULL
      ["id_animal"]=>
      int(1)
      ["url"]=>
      string(19) "/img/animals/1.jpeg"
    }

Ответы [ 2 ]

2 голосов
/ 03 апреля 2020

Использовать левое соединение здесь

$animales = DB::table('animals')
->orderBy('date_found')
->leftJoin('images','images.id_animal','animals.id')
->limit(6)
->get();
1 голос
/ 03 апреля 2020

Потому что одно животное имеет много изображений. Поэтому, когда вы используете join или leftjoin, и если у одной собаки есть два изображения, это станет двумя записями, в которых столбцы одной и той же собаки имеют разные изображения.

Таким образом, вы можете использовать группу следующим образом :

$animales = DB::table('animals')
              ->orderBy('date_found')
              ->join('images', 'images.id_animal', 'animals.id')
              ->groupBy('animals.id')
              ->limit(6)
              ->get();

И если вы установили строгий режим в config / database. php, вам нужно включить режим ONLY_FULL_GROUP_BY. Вы можете проверить это Как написать Laravel GroupBy Query? .

...