Невозможно отобразить элементы отношения многих ко многим Laravel 5.2

Я пытаюсь запросить данные из отношения «Многие ко многим» в Laravel 5.2 Но когда я хочу получить данные, я получаю пустую информацию. У меня есть некоторые сомнения, потому что данные, которые я получил, обнаруживают только quick_tags но там нет данных, и это должно быть quickTags,

Я делаю это в моем контроллере

<?php

namespace Knotion\Http\Controllers;

use Illuminate\Http\Request;
use Knotion\Http\Requests;
use Knotion\Http\Requests\ResourcesRequest;

use Knotion\CTL_Resource;
use Knotion\CTL_Tag;
use Knotion\CTL_QuickTag;
use Knotion\CTL_RelatedTo;
use Knotion\CTL_ResourceType;class ResourcesController extends Controller  {

public function index(Request $request)    {

$resources = CTL_Resource::paginate(10);$resources->each(function($resources) {
$resources->tags;
$resources->quickTags;
$resources->relatedTo;

});

return response()->json(
$resources->toArray()
);
}

и у меня есть этот код в моей модели

<?php

namespace Knotion;

use Illuminate\Database\Eloquent\Model;

class CTL_Resource extends Model  {
public $timestamps = false;

protected $table = "CTL_Resource";
protected $primaryKey = "idResource";

protected $hidden = [
'coachVisibility', 'thumbnail', 'tags', 'relatedTo',
'studentVisibility', 'isHTML','studentIndex', 'coachIndex',
'isURL', 'source', 'path', 'status', 'updateTime', 'isfolder',
'parentResource', 'idModifierUser'
];

protected $fillable = ['idResourceType','productionKey', 'tags', 'idCreatorUser', 'idModifierUser', 'idCreationCountry', 'title', 'description', 'URL', 'fileName', 'extension', 'minimumAge', 'maximumAge', 'productionKey'];

public function creatorUser() {
return $this->belongsTo('Knotion\OPR_User', 'idCreatorUser');
}
public function creationCountry() {
return $this->belongsTo('Knotion\CTL_Country', 'idCreationCountry');
}
public function resourceType()  {
return $this->belongsTo('Knotion\CTL_ResourceType', 'idResourceType');
}
public function quickTags() {
return $this->belongsToMany('Knotion\CTL_QuickTag', 'CTL_Resource_has_QuickTags', 'idResource','idQuickTag');
}
public function tags() {
return $this->belongsToMany('Knotion\CTL_Tag','CTL_Resource_has_Tags', 'idResource', 'idTag');
}
public function relatedTo() {
return $this->belongsToMany('Knotion\CTL_RelatedTo', 'CTL_Resource_has_RelatedTo', 'idResource', 'idRelatedTo');
}

}

Это результат. Как вы видите, есть quick_tags и его пусто

{
"total": 2,
"per_page": 10,
"current_page": 1,
"last_page": 1,
"next_page_url": null,
"prev_page_url": null,
"from": 1,
"to": 2,
"data": [
{
"idResource": 0,
"idResourceType": "49ee39d6-eecd-11e5-b044-4914876a7f3d",
"idCreatorUser": "04664624-eecd-11e5-b044-4914876a7f3d",
"idCreationCountry": "b4afa9ae-eecc-11e5-b044-4914876a7f3d",
"productionKey": "1234567890",
"title": "ElTitle1",
"description": "ElDescription1",
"minimumAge": "5",
"maximumAge": "10",
"fileName": "ElFileName1",
"extension": ".png",
"URL": "ElURL1",
"createTime": "2016-03-28 14:07:21",
"quick_tags": []
},
{
"idResource": 0,
"idResourceType": "49ee39d6-eecd-11e5-b044-4914876a7f3d",
"idCreatorUser": "04664624-eecd-11e5-b044-4914876a7f3d",
"idCreationCountry": "b4afa9ae-eecc-11e5-b044-4914876a7f3d",
"productionKey": "0987654321",
"title": "ElTitle2",
"description": "ElDescription2",
"minimumAge": "5",
"maximumAge": "10",
"fileName": "ElFileName2",
"extension": ".png",
"URL": "ElURL2",
"createTime": "2016-03-28 14:44:37",
"quick_tags": []
}
]
}

Я не знаю, если это необходимо, но это SQL-код отношений. Я просто публикую этот, но другие очень похожи

DROP TABLE IF EXISTS `CTL_Resource_has_QuickTags`;
CREATE TABLE `CTL_Resource_has_QuickTags` (
`idResource` varchar(40) NOT NULL COMMENT 'Foreign key to the CTL_Resource table ',
`idQuickTag` varchar(40) NOT NULL COMMENT 'foreign key to the CTL_QuickTags table.',
PRIMARY KEY (`idResource`,`idQuickTag`),
KEY `fk_CTL_Resource_has_QuickTag_QuickTag1_idx` (`idQuickTag`),
KEY `fk_CTL_Resource_has_QuickTag_CTL_Resource1_idx` (`idResource`),
CONSTRAINT `fk_CTL_Resource_has_QuickTag_CTL_Resource1_idx` FOREIGN KEY (`idResource`) REFERENCES `CTL_Resource` (`idResource`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_CTL_Resource_has_QuickTag_QuickTag1_idx` FOREIGN KEY (`idQuickTag`) REFERENCES `CTL_QuickTags` (`idQuickTag`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='this table establishes the amount of quicktags that a given tag';

0

Решение

Учитывая ваш idResource отображается как 0, а некоторые похожие поля выглядят как GUID, а поля внешнего ключа определены как varchar(40)Я собираюсь предположить, что ваш CTL_Resource.idResource поле также определяется как varchar(40),

В этом случае, когда $primaryKey Поле не является автоинкрементным целым числом, вам нужно сообщить об этом модели. Вы делаете это, устанавливая $incrementing Свойство на модели:

public $incrementing = false;

Кроме того, по отношению к вашему quick_tags против quickTags вопрос, который имеет отношение к $snakeAttributes собственность на вашей модели. Когда установлено значение true (по умолчанию), ваша модель будет snake_case ключи ваших отношений объектов при преобразовании в JSON (toJson()) или массив (toArray()). Если вы хотите отключить это, вам нужно установить $snakeAttributes Свойство на модели:

public static $snakeAttributes = false;

Итак, ваша модель должна выглядеть примерно так:

class CTL_Resource extends Model  {

// set the table name since it is not ctl_resources
protected $table = "CTL_Resource";

// set the primary key field since it is not id
protected $primaryKey = "idResource";

// primary key is not an auto-incrementing int
public $incrementing = false;

// no created_at, updated_at fields on this table
public $timestamps = false;

// don't snake case the relationship names on json/array conversion
public static $snakeAttributes = false;

// code ...
}
0

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

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