Laravel 获取所有关系和分页关系数据

Posted

技术标签:

【中文标题】Laravel 获取所有关系和分页关系数据【英文标题】:Laravel get All with Relationships and Paginate relationship data 【发布时间】:2021-02-09 14:39:31 【问题描述】:

我正在尝试获取所有用户及其关联的 (1:n) 期刊。但是我想为相关期刊添加分页,而不是用户

我的控制器:

public function index()
    
        $users = User::with(['journal'])->orderBy('name', 'asc')->get();
        return view('journals/journals', ['users' => $users]);
    

我的刀片:

 @foreach($users as $user)
                            
                        <a class="list-group-item list-group-item-action" data-toggle="collapse" href="#collapse$user->id" role="button" aria-expanded="false" aria-controls="collapse$user->id">
                            $user->name
                        </a>
                        <div class="collapse mt-1" id="collapse$user->id">
                            <div class="card card-body">
                                <div class="list-group">
                                <table class="table table-sm table-hover">
                                    <thead>
                                        <tr>
                                            <th scope="col">Kunde</th>
                                            <th scope="col">Betreff</th>
                                            <th scope="col">Leistungsart</th>
                                            <th scope="col">Beginn</th>
                                            <th scope="col">Ende</th>
                                            <th scope="col">Dauer</th>
                                            <th scope="col">Arbeitszeit</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        @foreach($user->journal as $journal)
                                        
                                            <tr onclick="window.location='route('journal.show', [$journal->id])'">
                                            
                                                <th scope="row">$journal->customer->name</th>
                                                <td>$journal->title</td>
                                                <td>$journal->type</td>
                                                <td>$journal->started</td>
                                                <td>$journal->ended</td>
                                                <td>$journal->duration</td>
                                                <td>$journal->worked</td>
                                            </tr>
                                        @endforeach
                                    </tbody>
                                </table>
                                </div>
                            </div>
                        </div>

                        @endforeach

我的日记模型:

public function user()
        return $this->belongsTo('App\User', 'user_id', 'id');
    

我的用户模型:

public function journal()
        return $this->hasMany('App\Journal', 'user_id', 'id');
    

再一次,我想要实现的是我可以打印出每个用户并对他们的日志进行分页,而不是对用户进行分页

我真的希望有人可以帮助我

【问题讨论】:

是否需要在每个用户的期刊或所有期刊上添加分页而不考虑用户? 【参考方案1】:

在刀片中渲染

在刀片中的每个循环的日志上方,尝试添加如下内容:

@php
$paginated_journals = $user->journal()->paginate(10);
@endphp

然后,您的 for-each 循环应如下所示:

@foreach($paginated_journals as $journal)
...
@endforeach

在 for-each 循环之后你可以放:

$paginated_journals->links()

获取分页链接

在控制器中预加载数据

你可以在服务器端做同样的事情。创建一个空的自定义数组,遍历每个用户,并将子数组添加到该自定义数组:

array_push($custom_array, ['user' => $user, 'journals' => $user->journal()->paginate(10)])

通过这种方式,您可以将自定义数组发送到刀片,循环遍历它,并呈现用户数据和分页日志。

【讨论】:

该死的,成功了!我只需要更改行 $paginated_journals = $user->journals()->paginate(10);到 $paginated_journals = $user->journal()->paginate(10);因为我的模型 完美!我已经更新了我的答案并修复了错误:)

以上是关于Laravel 获取所有关系和分页关系数据的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Livewire 无法解析模板上分页的雄辩关系

Laravel Eloquent,添加有限行的关系变为空

使用分页从两个关系(一个是通过访问器)获取记录

用SpringBoot+MySql+JPA实现对数据库的增删改查和分页

时间格式的处理和数据填充和分页---laravel

Laravel过滤与分页关系为空的记录