当我通过laravel的paginator($ var-> total()函数)检索我的结果计数或者在我的数据库查询中添加 - > count()时,它返回错误的计数。即使应用过滤器后页面上有ZERO项目,它仍然显示错误的数字。这个数字保持不变,不会改变 - 它是我父模型中的总行数。但是,再次 - 它不应该显示我的父模型中的总行数 - 它应该显示应用过滤器后可用的行。
问题中的过滤查询:
$orders = list_formstack::with(['order' => function($query) use ($checktv, $dstart, $dend, $thestatus, $pharmacy, $searchid, $searchsubid, $searchrefill, $searchgrams, $filterrep) {
$query->whereNotNull('subid');
if($checktv == "No") {
$query->whereNull('intake');
}
elseif($checktv == "Yes") {
$query->whereNotNull('intake');
}
if($dstart && $dend)
$query->whereBetween('orders.created_at', [$dstart, $dend]);
if($thestatus)
$query->where('orders.status', $thestatus);
if($pharmacy)
$query->where('pharmacy', $pharmacy);
if($searchid)
$query->where('orders.id', $searchid);
if($searchsubid)
$query->where('orders.subid', $searchsubid);
if($searchrefill)
$query->where('refill', $searchrefill);
if($searchgrams)
$query->where('grams', $searchgrams);
if($filterrep)
$query->where('salesrep', $filterrep);
}])->where(function($query) use ($prodgroup, $state, $search, $columns, $searchpatient, $searchcarrier) {
if($state)
$query->where('state', $state);
if($searchpatient)
$query->where('first', 'like', $searchpatient)->orWhere('last', $searchpatient)->orWhere('phone', $searchpatient);
if($searchcarrier)
$query->where('insurancecarrier', 'like', $searchcarrier);
})->orderBy('created_at', 'desc')->paginate(50);
父模型:
class list_formstack extends Model
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'formstack';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['parentid','first','last','state','insurancecarrier'];
/**
* Get the form for an order
*/
public function order()
{
return $this->hasMany('App\list_orders', 'formid', 'id')->groupBy('id');
}
}
儿童/关系模型:
class list_orders extends Model
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'orders';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['id','status','subid','formid','salesrep','billedamt','copayamt','completed','refillcount','gramsleft','billedamt','copayamt','salesrep','intake','created_at'];
public function formstack()
{
return $this->belongsTo('App\list_formstack', 'orderid');
}
}
正如您在我的Eloquent查询中所看到的,我根据用户是否选择了该过滤器来过滤掉结果。因此,如果我将“thestatus”过滤掉一个特定的状态,它只显示该状态的正确结果,但计数不会改变。
我甚至试图把结果扔进一个集合中:
$count = collect($orders);
$count->count();
没有运气 - 同样的错误号码。
对此有何见解?我究竟做错了什么?提前谢谢!
编辑:我应该注意,使用Laravel的查询生成器(NO Eloquent ORM模型)会导致分页计数正常工作。
父模型数据库表 Parent Model Table Structure 儿童模型数据库表 Child Model Table Structure