Laravel Eloquent关于加入关系的条款

时间:2018-03-02 15:45:19

标签: laravel laravel-5 eloquent laravel-eloquent laravel-5.6

我尝试在日期之间显示所有用户的点值。点值需要在开始日期和结束日期范围之间。我遇到的问题是我有ActivityName模型加入ActivityPoints以显示类别名称。我总是知道在联接中添加一个where子句,但是我不确定加入关系会在哪里落下。

$SalesReps = User::with('ActivityPoints', function ($query) use ($StartDate, $EndDate) {
                $query->where('created_at', '>=', $StartDate);
                $query->where('created_at', '<=', $EndDate);
            }, 'ActivityPoints.ActivityName')
            ->whereIn('id', $SalesRepsData->pluck('id')->toArray())
            ->get();

这会返回错误: mb_strpos() expects parameter 1 to be string, object given

显然,我可以这样做:

$SalesReps = User::with('ActivityPoints', 'ActivityPoints.ActivityName')
            ->whereHas('ActivityPoints', function ($query) use ($StartDate, $EndDate) {
                $query->where('created_at', '>=', $StartDate);
                $query->where('created_at', '<=', $EndDate);
            })
            ->whereIn('id', $SalesRepsData->pluck('id')->toArray())
            ->get();

但它不会向用户显示零点(空值)。

谢谢!

3 个答案:

答案 0 :(得分:0)

WhereBetween 选项可以正常工作

$SalesReps = User::with('ActivityPoints', 'ActivityPoints.ActivityName')
    ->whereHas('ActivityPoints', function ($query) use ($StartDate, $EndDate) {
        $query->whereBetween('created_at', array($StartDate,$EndDate));
      })
    ->whereIn('id', $SalesRepsData->pluck('id')->toArray())
    ->get();

答案 1 :(得分:0)

请尝试以下代码。

NotificationCenter

答案 2 :(得分:0)

在它周围添加了一个支架,它很有用......很奇怪。

     $SalesReps = User::with(['ActivityPoints' => function ($query) use ($StartDate, $EndDate) {
            $query->where('created_at', '>=', $StartDate);
            $query->where('created_at', '<=', $EndDate);
        }], 'ActivityPoints.ActivityName')
        ->whereIn('id', $SalesRepsData->pluck('id')->toArray())
        ->get();