【问题标题】:Using pagination with foreach roop in Laravel在 Laravel 中使用 foreach 循环进行分页
【发布时间】:2017-11-02 09:07:02
【问题描述】:

以下代码包括 roop 语句和分页。 我也希望遵循 MVC 样式编码,但在这种情况下,我必须在下面的视图中使用 @if 语句。

当我尝试按@if(!deleted_at == null) 过滤时出错,但我无法显示正确的分页,因为这段代码也用“(deleted_at == null)”计数,所以结果是显示的页码不正确。

通过此控制器后,如何修改此代码以获得正确的分页结果?

我认为错误来自将 Where() 与 Orwhere() 一起使用。
谢谢:)

按用户名和客户名搜索框

index.php

 <div style="overflow-x: auto; display: inline-flex;">
   {!! Form::open(array('class' => 'form', 'method' => 'get', 'url' => url('/stopjobs/job_finished_search_date'))) !!} 
   {{ Form::input('text', 'datepicker_from', null, ['placeholder' => 'Fra', 'id' => 'datepicker_from']) }}
    &nbsp;
   {{ Form::input('text', 'datepicker_to', null, ['placeholder' => 'Til', 'id' => 'datepicker_to']) }} 
        {!! Form::submit('Søke', ['class' => 'btn btn-success btn-sm']) !!}
   {!! Form::close() !!}
    &nbsp;
   {!! Form::open(array('class' => 'form', 'method' => 'get', 'url' => url('/stopjobs/job_finished_search_name'))) !!}
   {!! Form::text('name', null, ['placeholder' => 'Bruker eller Kunde']) !!}
   {!! Form::submit('Søke', ['class' => 'btn btn-success btn-sm']) !!} 
   {!! Form::close() !!}
 </div>

控制器

public function job_finished_search_name(Request $request) 
{ 
    $jobs = Job::onlyTrashed()
    ->where('user_name', 'like', '%'.$request->name.'%')
    ->orwhere('customer_name', 'like', '%'.$request->name.'%')
    ->orderBy('deleted_at', 'desc')
    ->paginate(15);

    return view('stopjobs.index', ['jobs' => $jobs]); 
}

查看

<tbody>
@foreach($jobs as $job)
    @if(!$job->deleted_at == null)
    <tr>
        <td>{!! $job->id !!}</td>
        <td>{!! $job->user_name !!}</td>
        <td>{!! $job->created_at !!}</td>
        <td>{!! $job->deleted_at !!}</td>
        <td>{!! $job->usedTime() !!}</td>
    </tr>
    @endif
@endforeach
</tbody>
</table>
</div>
{{ $jobs->links()}}

【问题讨论】:

  • 软删除的模型将自动从查询结果中排除。你为什么放这张支票???阅读此链接laravel.com/docs/5.4/eloquent#soft-deleting
  • @ParthShah,我已经在模型中使用了 softdeleted,所以我在服务器中删除了日期。如果你想在视图中查看已删除的日期,那你怎么能做到这一点,而不是在其他地方,比如模型和控制器呢?
  • 所以你只想显示垃圾数据???
  • @ParthShah,我希望在这种情况下得到正确的分页数:),得到垃圾数据不是问题。:)
  • @if($job-&gt;deleted_at != null) 呢?

标签: php laravel laravel-5 laravel-pagination


【解决方案1】:

查询职位时,请使用where 语句。没有别的办法

$jobs = Job::whereNull('deleted_at')->get();

【讨论】:

  • 我已经在这个控制器中使用了“Job::onlyTrashed()”。谢谢。
  • 那你需要再次检查文档laravel.com/docs/5.5/eloquent#querying-soft-deleted-modelsonlyTrashed 表示所有返回的记录将被删除,所以deleted_all 永远不会为空。也许您想使用withTrashed,它将返回所有记录,无论是否删除。但在您看来,您想查看未删除记录,因此此处无需使用withTrashed
  • 我是倒过来理解的,因为我没有注意到! 符号?
  • 我修改了问题,你能帮忙吗?;)
  • 在您看来,您不需要if,您已经在过滤以仅获得deleted_at !== nullonlyTrashed 的工作
【解决方案2】:

如果您只想通过分页显示软删除的数据,那么试试这个

$jobs = Job::onlyTrashed()
                ->where('key', 'value')
                ->paginate();

【讨论】:

  • 我正在使用这个。 $jobs = Job::onlyTrashed() ->where('user_name', 'like', '%'.$request->name.'%') ->orwhere('customer_name', 'like', '%' .$request->name.'%') ->orderBy('deleted_at', 'desc') ->paginate(15);使用视图获得正确结果在哪里不正确,包括 foreach 和分页?谢谢。
  • 我认为问题是 where 和 orWhere 条件也获取未删除的数据。如果是这种情况,您必须使用 this where(function ($q) use ($data) { $q->where();$q->orWhere(); });
  • 我做到了,但这不是获得正确分页的解决方案。;(
猜你喜欢
  • 2020-06-17
  • 2010-12-13
  • 1970-01-01
  • 2015-03-28
  • 2018-09-17
  • 2013-04-10
  • 2019-07-12
  • 2021-08-30
  • 2012-08-06
相关资源
最近更新 更多