У Laravel есть много отношений, возвращающих огромные объемы данных, которые не являются коллекцией?

Я работаю над очень простым API с использованием laravel. У пользователей много задач, и задача принадлежит пользователю. Мой файл маршрутов выглядит следующим образом:

<?php

Route::resource('users', 'UsersController');
Route::get('users/{user_id}/tasks', 'UsersController@show_tasks');
Route::resource('tasks', 'TasksController');

Я хочу, чтобы второй маршрут получал все задачи, связанные с этим конкретным пользователем. Это просто. Я просто добавил отношение в моей модели User следующим образом:

public function tasks(){
return $this->hasMany('Task');
}

И show_tasks метод в моем UsersController как следует :

public function show_tasks($id){

if(!$user = $this->user->find($id)){
return Acme::response('error', 'Resource not found.', [], 404);
}

$tasks = $user->tasks();
dd($tasks);

return Acme::response('success', [], $tasks, 200);
}

Я поместил метод dd, потому что ответ возвращал пустой массив, и я хотел посмотреть, что находится в $tasks переменная из первых рук. Я думал, что это должен быть объект коллекции, но когда я запустил его в моем REST-клиенте Postman, он завис из-за большого переполнения данных, я предполагаю, скриншот ниже:

Вывод из вызова метода dd!

Если кому-то интересно Acme::response метод, я также включаю этот код:

public static function response($status = [], $messages = [], $data = [], $httpStatusCode){
return Response::json([
'status' => $status,
'messages' => $messages,
'data' => $data,
], $httpStatusCode);
}

Почему отношения не работают? Я был этим часами и до сих пор не могу понять, почему! Я предполагаю, что где-то совершаю очень глупую ошибку, но все равно не могу ее исправить!

0

Решение

Вы не должны использовать () Вот. Вместо:

$tasks = $user->tasks();

Вы получите свои задачи, используя:

$tasks = $user->tasks;

РЕДАКТИРОВАТЬ

Когда у вас есть отношения, и вы используете $user->tasks это работает так, как вы бы использовали $user->tasks()->get() так что мы можем сказать, что это ярлык.

Вы можете использовать паразиты, которые у вас есть, вы можете добавить больше условий, например, вы можете сделать что-то вроде этого:

$tasks = $user->tasks()->active()->get();

и определить область в вашем Task модель:

function activeScope($q) {
return $q->where('status',1);
}

И теперь вы можете получать только активные задания для пользователя.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]