【问题标题】:Laravel Query Builder error with joins and parameter grouping带有连接和参数分组的 Laravel Query Builder 错误
【发布时间】:2018-11-20 22:09:17
【问题描述】:

有一组查询我想从原始查询构建器转换,但在使用参数分组时遇到问题:

SQLSTATE[42S22]:未找到列:1054 未知列 'where 子句'中的'users.trail_ends_at'(SQL:选择'campaigns'。* 从 'users' 内部加入 'campaigns' on 'users'.'id' = 'campaigns'.'user_id' 在 'users'.'id' 上内部加入 'subscriptions' 'subscriptions'.'user_id' where ('users'.'trial_ends_at >= 2018-06-15 00:00:00 或 'users'.'trail_ends_at' 为空)和 'campaign'.'active' = 1 和 'campaign'.'style' = 每月和 ('订阅'.'trial_ends_at' >= 2018-06-15 00:00:00 或 'subscriptions'.'trail_ends_at' 为空)和 ('订阅'.'ends_at' >= 2018-06-15 00:00:00 或 'subscriptions'.'ends_at' 为空))

有效的 SQL 查询:

DB::select('select c.* 
FROM  users u, subscriptions s, campaigns c
WHERE   c.user_id = u.id
AND s.user_id = u.id
AND (u.trial_ends_at IS NULL OR u.trial_ends_at >= CURDATE() + :leadDays1)
AND c.active > 0
AND c.style = \'monthly\'
AND (s.ends_at IS NULL OR s.ends_at >= CURDATE() + :leadDays2)
AND (s.trial_ends_at IS NULL OR s.trial_ends_at >= CURDATE() + :leadDays3)
AND c.send_on <= CURDATE() + :leadDays4
AND MONTH(c.send_on) = MONTH(CURDATE() + :leadDays5),
AND DAYOFMONTH(c.send_on) = DAYOFMONTH(CURDATE() + :leadDays6)',
     [
       'leadDays1' => $leadDays,
       'leadDays2' => $leadDays,
       'leadDays3' => $leadDays,
       'leadDays4' => $leadDays,
       'leadDays5' => $leadDays,
       'leadDays6' => $leadDays
      ]
 );

生成器查询错误:

$checkDate = Carbon::today()->addDays($leadDays);

    return $campaigns = DB::table('users')
    ->join('campaigns', 'users.id', '=', 'campaigns.user_id')
    ->join('subscriptions', 'users.id', '=', 'subscriptions.user_id')
    ->select('campaigns.*')
    ->where(function ($query) use ($checkDate) {
        return $query->where('users.trial_ends_at', '>=', $checkDate)
        ->orWhereNull('users.trail_ends_at');
      })
    ->where('campaign.active', '=', 1)
    ->where( 'campaign.style', '=', $style)
    ->where(function ($query) use ($checkDate) 
        {
        return $query->where('subscriptions.trial_ends_at', '>=', $checkDate)
    ->orWhereNull('subscriptions.trail_ends_at');
       })
    ->where(function ($query) use ($checkDate) {
        return $query->where('subscriptions.ends_at', '>=', $checkDate)
    ->orWhereNull('subscriptions.ends_at');
       });

【问题讨论】:

  • 我猜在内部 where 调用中,您不需要参数数组,只需用作 $query-&gt;where('subscriptions.trial_ends_at', '&gt;=', $checkDate)
  • 感谢,更新、重新运行和更新了新错误的详细信息。

标签: laravel eloquent laravel-query-builder


【解决方案1】:

检查您的列名。我认为trail_ends_at 应该是trial_ends_at

【讨论】:

    猜你喜欢
    • 2015-10-29
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2022-01-08
    • 2013-07-18
    • 2021-08-20
    • 2015-06-15
    相关资源
    最近更新 更多