【问题标题】:LARAVEL Getting 2 of the same columnsLARAVEL 获取 2 个相同的列
【发布时间】:2020-04-03 18:07:38
【问题描述】:

我有一个有动物的桌子,另一个有动物的图像(id_image,id_animal)。

问题是当我这样做时:

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

当我这样做时,它会为每个图像返回相同的动物。这是一个问题,因为当我显示所有动物时,它会多次显示相同的动物

我能做什么?我尝试使用组,但它不起作用。

谢谢!

 [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"
    }

【问题讨论】:

  • 会不会是因为你错过了=
  • 我添加了它,但谢谢!
  • 我能知道动物和图像之间的关系吗?请使用回复json而不是var_dump来显示您的回复,以便于阅读

标签: php laravel laravel-blade


【解决方案1】:

在这里使用左连接

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

【讨论】:

  • 它仍然返回相同的动物,我用 return var_dump 编辑了问题
  • Animals 表和 images 表必须包含相同的行。
【解决方案2】:

因为一种动物有很多图像。所以当你使用joinleftjoin时,如果有一条狗有两张图片,就会变成两条不同图片的相同狗列的记录。

所以你可以像这样使用 group by:

$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模式。 你可以查看这个How to write Laravel GroupBy Query?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2012-03-06
    • 2020-03-01
    • 2021-12-13
    相关资源
    最近更新 更多