Laravel分页/计数 - 应用过滤器后不准确

时间:2016-02-10 05:28:10

标签: php laravel pagination laravel-5 eloquent

当我通过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

0 个答案:

没有答案