我有此资源:
class Job extends JsonResource
{
public function toArray($request)
{
// the quantity of branch this job belongs to
$branchesQuantity = BranchJob::where('job_id', $this->id)->count();
// the quantity of countries this job belons to
$countriesQuantity = JobCountry::where('job_id', $this->id)->count();
// the translations of the job
$jobTranslations = JobTranslation::where('job_id', $this->id)
->select('id', 'language_id', 'external_translation', 'internal_translation')->orderBy('language_id')->get();
return [
'id' => $this->id,
'short_name' => $this->short_name,
'status' => $this->status,
'branches_quantity' => $branchesQuantity,
'countries_quantity' => $countriesQuantity,
'job_translations' => $jobTranslations
];
}
}
这是我控制器中的代码:
$queryJob = DB::table('jobs as j')
->join('job_translations as jt', 'j.id', 'jt.job_id');
...其他一些代码
$jobs = $queryJob->get();
return JobResource::collection($jobs);
它工作正常。它返回正确的json。完善。
我想对结果进行分页,所以我用:
修改了查询。 $jobs = $queryJob->paginate($qtyItemsPerPage);
return JobResource::collection($jobs);
我遇到此错误:
Symfony \ Component \ Debug \ Exception \ FatalThrowableError:无法使用 类型为stdClass的对象作为文件中的数组 /srv/api/vendor/laravel/framework/src/Illuminate/Http/Resources/DelegatesToResource.php 在第53行
并且不理解为什么没有分页就可以工作,也不能与分页一起工作。谢谢你的帮助。唐
答案 0 :(得分:0)
Laravel分页器结果类实现了 照亮\合同\支持\合理的接口合同并公开 toJson方法,因此转换分页非常容易 结果转换为JSON。
https://laravel.com/docs/5.4/pagination#converting-results-to-json
因此您可以使用
return $queryJob->paginate($qtyItemsPerPage);
Laravel为集合提供forPage()
,但是它是低级的。
https://laravel.com/docs/5.4/collections#method-forpage
如果您的laravel版本低于5.5,则可以使用macro
获得相同的paginate
行为。
https://gist.github.com/simonhamp/549e8821946e2c40a617c85d2cf5af5e
如果版本5.5 =>,则可以将分页程序实例传递给资源的收集方法或自定义资源收集。
答案 1 :(得分:0)
根据documentation,您需要先获取分页结果,然后转换为资源集合
use App\User;
use App\Http\Resources\UserCollection;
Route::get('/users', function () {
return new UserCollection(User::paginate());
});
这样您就可以使用
$jobs = $queryJob->paginate(10);
return JobResource::collection($jobs);
答案 2 :(得分:0)
我使用传统的查询生成器解决了该问题。而不是雄辩的查询。由于现在工作正常,所以没有找到其他解决方案。 Dom