【问题标题】:Having trouble creating a Laravel query创建 Laravel 查询时遇到问题
【发布时间】:2014-12-15 09:31:56
【问题描述】:

我正在尝试在 Laravel 4 中创建一个表单选择框。

有 3 个模型在起作用:用户、乐队和专辑。

我建立了雄辩的关系,并按如下方式工作:

  • 一个用户有很多波段
  • 一个乐队有很多用户
  • 一个乐队有很多专辑
  • 专辑属于乐队

如何创建一个数组 $albums:

$userid = Auth::user()->id;
$albums = Album::where(the band the album belongs to has a user with id = $userid);

我似乎无法弄清楚这一点。

我是否应该在相册和用户之间创建多对多关系,以便构建更简单的查询,例如 $albums = $user->albums;

我宁愿不必创建另一个多对多关系,因为这是一个全新的数据库管理级别,可以让事情变得混乱。

感谢您的帮助! 〜罗斯

【问题讨论】:

    标签: sql forms select laravel eloquent


    【解决方案1】:

    试试这个:

    $user = Auth::user();
    $albums = new \Illuminate\Database\Eloquent\Collection;
    foreach($user->bands as $band){
        $albums = $albums->merge($band->albums);
    }
    

    【讨论】:

    • 太棒了,效果很好,谢谢!我会给你一个投票,但没有所需的声誉..再次感谢!我永远不会想到这一点。
    • 没问题。我可以没有赞成票。如果你有足够的时间,你可以随时回来;)
    • 您好,lukasgeiter,当用户拥有多个乐队时,我遇到了问题。通过在 foreach 循环完成迭代后移动 ->lists 函数来解决它。再次感谢!
    • 好吧,如果你只想要 id 和 title 你需要使用 lists() 但是我的回答仍然回答了你的问题,我不明白你为什么不接受它......
    • 嗨,我不是故意不接受这个答案,抱歉,不知道这是怎么回事。不幸的是,当用户拥有多个乐队时,您的答案无法正常工作,由于某种原因,它没有迭代并将信息添加到数组中,它只是抛出了一个错误。通过将 lists() 命令移出 foreach 循环,似乎可以解决问题,请参阅下面的答案。谢谢,对不起。
    【解决方案2】:

    lukasgeiter 几乎得到了正确的答案,唯一的问题是不止一个乐队它抛出了一个错误。我通过在 foreach 循环中合并 $band->albums 来修复它,然后在循环完成时创建列表数组。

    $albumcheck = new \Illuminate\Database\Eloquent\Collection;
      foreach($user->bands as $band){
        $albumcheck = $albumcheck->merge($band->albums);
      }
    $albums = $albumcheck->lists('title', 'id');
    

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2017-01-20
      • 1970-01-01
      相关资源
      最近更新 更多