Борьба с использованием parseIncludes в https://github.com/thephpleague/fractal.Использование parseincludes в Laravel5 Fractal
У меня есть две таблицы, собственность и недели. Каждое свойство имеет много недель. Используя Fractal, я могу вернуть свой элемент недвижимости с коллекцией недель. Я хочу использовать parseIncludes, так что возвращение недель является необязательным.
PropertyTransformer.php
<?php
namespace App\Transformer;
use App\Models\Property;
use League\Fractal\TransformerAbstract;
class PropertyTransformer extends TransformerAbstract
{
protected $availableIncludes = [
'week'
];
public function transform(Property $property)
{
return [
'id' => (int) $property['PropertyID'],
'PropertyName' => $property['PropertyName'],
'ExactBeds' => (int) $property['ExactBeds'],
'weeks' => $property->week
];
}
/**
* Include Week
*
* @return League\Fractal\ItemResource
*/
public function includeWeek(Property $property)
{
$week = $property->week;
return $this->item($week, new WeekTransformer);
}
}
WeekTransformer.php
<?php
namespace App\Transformer;
use App\Models\Week;
use League\Fractal;
class WeekTransformer extends Fractal\TransformerAbstract
{
public function transform(Week $week)
{
return [
'Week' => $week['week'],
'Available' => $week['available'],
'Price' => (int) $week['price'],
];
}
}
Мои PropertyController.php
<?php namespace App\Http\Controllers\Api\v1;
use App\Http\Requests;
use App\Models\Week;
use Illuminate\Support\Facades\Response;
use App\Models\Property;
use League\Fractal;
use League\Fractal\Manager;
use League\Fractal\Resource\Collection as Collection;
use League\Fractal\Resource\Item as Item;
use App\Transformer\PropertyTransformer;
class PropertyController extends \App\Http\Controllers\Controller {
public function show($id)
{
$property = Property::with('bedroom')->with('week')->find($id);
$fractal = new Fractal\Manager();
if (isset($_GET['include'])) {
$fractal->parseIncludes($_GET['include']);
}
$resource = new Fractal\Resource\Item($property, new PropertyTransformer);
//$resource = new Fractal\Resource\Collection($properies, new PropertyTransformer);
return $fractal->createData($resource)->parseIncludes('weeks')->toJson();
}
Я получаю следующее сообщение об ошибке на parseIncludes: -
Метод «parseIncludes» не найден в классе \ лига \ Fractal \ Scope
Я следую руководство здесь на трансформаторах - http://fractal.thephpleague.com/transformers/
Я думаю, что я неправильно где-то здесь, где он говорит: -
это включает в себя будут доступны, но никогда не может быть запрошена, если Управление :: parseIncludes() вызывается метод:
<?php
use League\Fractal;
$fractal = new Fractal\Manager();
if (isset($_GET['include'])) {
$fractal->parseIncludes($_GET['include']);
}
Если я удалить parseIncludes, я не получаю сообщение об ошибке, я также получаю мои данные свойства с моим коллективом n недель, но? include = week не работает, чтобы получить его.
Благодаря Армен, вы совершенно правы. Решение, которое я нашел, использовало его, и оно отбрасывало меня от запаха. Проблема была в другом месте, и parseincludes был необходим, и, как вы говорите, это не метод для Scope. Спасибо за вашу помощь. –
Добро пожаловать, Пол. –
убедитесь, что у вас есть 'protected $ availableIncludes = ['xxx']' – Rafee