【问题标题】:Retrieve grouped relation with Eloquent ORM使用 Eloquent ORM 检索分组关系
【发布时间】:2021-01-10 02:55:24
【问题描述】:

我的关系如下所示:

User
 - id
Menu
 - id
 - appetizer_id
 - main_course_id
 - dessert_id
User_Menu
 - user_id
 - menu_id

及对应型号:

class User
{
    public function menus()
    {
        return $this->belongsToMany('App\Models\Menu', 'user_menu', 'user_id', 'menu_id');
    }
}

class Menu 
{
    public function dessert()
    {
        return $this->belongsTo('App\Models\Dessert', 'dessert_id');
    }
}

换句话说,存在具有多对多关系的用户和菜单。现在我想检索给定用户的所有不同的 desserts。我尝试过使用 group by,但它不允许我按单个列进行选择和分组,因为查询列始终包含在查询中:

$desserts = User::find(1)->menus()
    ->select('dessert_id')
    ->groupBy('dessert_id')
    ->with('dessert')
    ->get();

抛出以下错误:

'User_Menu.user_id' isn't in GROUP BY

【问题讨论】:

  • 用户会是认证用户吗??
  • @dqureshiumar 是的,虽然没关系?

标签: laravel eloquent group-by eloquent-relationship


【解决方案1】:
$desserts = User::join('User_Menu', 'User.id', '=', 'User_Menu.user_id')
                ->join('Menu', 'User_Menu.menu_id', '=','Menu.id')
                ->get();

【讨论】:

  • 对不起,我忘记了菜单上的主键,它只是另一个 id 字段。但是我想知道是否有一种方法可以使用引用菜单模型的用户模型上的“belongsToMany”关系来做到这一点,在我的示例中我称之为“菜单”
  • 是的。请更新您的代码。我会帮助您解决问题
  • 太好了,我已经添加了我的模型定义
猜你喜欢
  • 1970-01-01
  • 2019-08-24
  • 2014-09-08
  • 2020-03-25
  • 2013-09-28
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多