Пытаюсь в Laravel5 сделать правильную связь hasMany c выбором нескольких столбцов из дочерней таблицы.
Есть модель Event (мероприятие) к нему привязан один или больше Diploma (Диплом).
Для Мероприятия из таблицы Diploma мне нужно
выбирать только некоторые поля (id и name), поскольку там есть очень объемные поля, тянуть которые каждый раз не нужно.
Таблица events:
id
name
date
Таблица diplomas:
id
event_id
name
setupdata
Делаю так:
Модель<?php
namespace osportid\Models;
use Illuminate\Database\Eloquent\Model;
class Event extends Model
{
protected $table = 'events';
/**
* Получить дипломы для Мероприятий
*/
public function event_diplomas()
{
return($this->hasMany('osportid\Models\Diploma', 'event_id', 'id'));
}
}
Контроллер:
В таком вариант все работает, но выводит сразу все поля из таблицы diplomas
.....
/*
Show Event View by event Identify
*/
public function getEvent($id)
{
$event = Event::with(['event_diplomas'])->where("id", '=', $id)->firstOrFail();
dd($event);
}
.....
Так не работает (вывод event_diplomas - пусто)<?php
namespace osportid\Models;
use Illuminate\Database\Eloquent\Model;
class Event extends Model
{
protected $table = 'events';
/**
* Получить дипломы для Мероприятий
*/
public function event_diplomas()
{
return($this->hasMany('osportid\Models\Diploma', 'event_id', 'id')->select('id','name')));
}
}
Так тоже не работает (вывод event_diplomas опять пусто).....
/*
Show Event View by event Identify
*/
public function getEvent($id)
{
$event = Event::with([
'event_diplomas'=>function($query)
{
$query->select('id', 'name');
}
])->where("id", '=', $id)->firstOrFail();
dd($event);
}
.....
Я перечитал тучу иностранных форумов и Стэковерфлоу, и нашел эти решения, но как понял из комментариев - у кого-то они работают, у кого-то не работают.