Laravel Eloquent关于加入关系的条款

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel Eloquent关于加入关系的条款相关的知识,希望对你有一定的参考价值。

我正在尝试向所有用户显示日期之间的点值。点值需要在开始日期和结束日期范围之间。我遇到的问题是我有一个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();

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

谢谢!

答案

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();
另一答案

请尝试以下代码。

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

在它周围添加一个支架,它工作..奇怪。

     $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();

以上是关于Laravel Eloquent关于加入关系的条款的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent 关系方法语法

Laravel Eloquent 在 belongsToMany 关系上返回一个空集合

关于Eager用Laravel Eloquent Model中的选择过滤器加载

加入 Laravel 的 Eloquent

Laravel Eloquent 关系有很多错误:在 where 上使用时调用未定义的方法

Laravel Eloquent 加入表和计数相关