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 在 belongsToMany 关系上返回一个空集合
关于Eager用Laravel Eloquent Model中的选择过滤器加载