如何在一个急切加载的模型中使用groupby?

w8rqjzmb  于 2021-06-25  发布在  Mysql
关注(0)|答案(4)|浏览(414)

我想申请 groupBynotices 建模依据 notice_date 就像这样

  1. $admin = Admin::with([
  2. 'notices' => function($query) use($request)
  3. {
  4. $query->where('type', $request->notice_type)
  5. ->whereBetween('notice_date', [$request->start_date, $request->end_date])
  6. ->oldest('created_time')->groupBy('notices.notice_date');
  7. }, 'user:id,name'
  8. ])->get();

因为我想印成这样

  1. 2018-01-10
  2. Admin_name notice1 notice2 notice3
  3. John abc abc pqr
  4. Mary mno pqr abc
  5. 2018-01-11
  6. Admin_name notice1 notice2 notice3
  7. abc mno pqr abc
  8. pqr pqr pqr mno

但是当我使用 groupBy 在查询中,它给了我一个错误

  1. SQLSTATE[42000]: Syntax error or access violation: 1055 'post.notices.id' isn't in GROUP BY
blpfk2vs

blpfk2vs1#

在groupby函数中指定关系名称

  1. ->groupBy('notices.notice_date');
d4so4syb

d4so4syb2#

如果要按通知日期显示管理员,应按以下方式加载数据:

  1. $notices = Notice::with('admin.user')
  2. ->where('type', $request->notice_type)
  3. ->whereBetween('notice_date', [$request->start_date, $request->end_date])
  4. ->oldest('created_time')
  5. ->get();

然后使用 groupBy() 像以前一样收集方法:

  1. $grouped = $notices->groupBy('notice_date');
nqwrtyyt

nqwrtyyt3#

  1. $user = User::with('items');
  2. $items = collect($user->items);
  3. unset($user->items);
  4. $user->items = $items->groupBy('column');
ct3nt3jp

ct3nt3jp4#

那是因为你在 select statement 必须出现在group by子句中。首先,您可以尝试在 app/database.php ```
'connections' => [
'mysql' => [
'strict' => false,
]
]

  1. 虽然不建议这样做,但是您可以尝试以下方法-

$admin = Admin::with([
'notices' => function($query) use($request)
{
$query->select(DB::raw('notice_date'))->where('type', $request->notice_type)
->whereBetween('notice_date', [$request->start_date, $request->end_date])
->oldest('created_time')->groupBy('notice_date');
}, 'user:id,name'
])->get();

  1. 您可以阅读本文以更好地理解 `strict mode` .
展开查看全部

相关问题