2015-11-03 68 views
3

我想分页以下关系(有许多应用程序类别):如何分页“有很多”的订购关系?

class Category extends Model 
{ 
    public function apps() 
    { 
     return $this->hasMany('App\App')->orderBy('current_price', 'asc'); 
    } 
} 

的问题是,当我添加->paginate(10);到该行的末尾,我收到以下错误:

Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation

我在这里错过了什么?

+1

我不认为你可以添加一个分页方法的关系。为关系实现分页。你需要做的是分页应用程序变量时返回控制器.. –

回答

7

你试过吗?

$category = Category::first(); 
$apps = $category->apps()->paginate(10); 
return view('example', compact('category', 'apps')); 

然后,在您的视图中,您可以循环浏览应用程序。在你看来

$category = Category::first(); 
$category->setRelation('apps', $category->apps()->paginate(10)); 
return view('example', compact('category'); 

然后:

@foreach ($apps as $app) 
    {{ $app->id }} 
@endforeach 

{!! $apps->render() !!} 

如果你想将其设置为A类的关系,你可以使用setRelation方法

@foreach ($category->apps as $app) 
    {{ $app->id }} 
@endforeach 

{!! $category->apps->render() !!} 
+0

这工作就像一个魅力!它不是急切的加载,但它工作。谢谢! – cbloss793

+0

这正是我需要的!谢谢! – sehummel

1

为了得到这个工作,我不得不绕过雄辩的关系。我创建了一个存储库。

在这个例子中,用户有很多报告。

应用程序\库\ ReportsRepository

这会得到用户的报告记录。

namespace App\Repositories; 

use App\User; 

class ReportsRepository 
{ 
    public function findByUser(User $user, $paginate = 10) 
    { 
     $reports = User::find($user->id) 
      ->reports() 
      ->orderBy('created_at', 'DESC') 
      ->paginate($paginate); 
     return $reports; 
    } 
} 

ReportController

这里我们所说的ReportsRepositroy得到记录(我已经删除了验证代码)。

class ReportController extends Controller 
{ 
    public function index(\App\Repositories\ReportsRepository $repo) 
    { 
     $reports = $repo->findByUser(Auth::user()); 
     return view('report.index', ['reports' => $reports]); 
    } 
} 

视图 - 报告/ index.blade.php

这里分页最重要的一点是{! $ reports-> render()!!}。这会生成分页的链接。

@extends('layout.master') 

@section('content') 
    <div class="content"> 
     <h1>Reports</h1> 

     @if ($reports->count()) 
      <table class="table"> 
       <thead> 
        <tr> 
         <th>Status</th> 
         <th>Info</th> 
         <th>Date</th> 
        </tr> 
       </thead> 

       <tbody> 
       @foreach($reports as $report) 
        <tr class="{{ $report['status'] }}"> 
         <td>{{ $report['status'] }}</td> 
         <td>{{ $report['info'] }}</td> 
         <td>{{ $report['created_at'] }}</td> 
        </tr> 
       @endforeach 
       </tbody> 
      </table> 
     @else 
      <p>No records exist.</p> 
     @endif 

     {!! $reports->render() !!} 

    </div> 
@stop 

这就是所有需要的。 Laravel处理其他分页魔法本身。

希望这会有所帮助。