2015-01-24 4 views
0

У меня есть две модели (и две таблицы в базе данных) в Laravel 5: Artwork and Option (имена таблиц - это произведения и варианты). Одна работа может иметь много вариантов, так что мои модели заключаются в следующем:Таблицы связей Laravel слияния

<?php namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Artwork extends Model { 

    public function options(){ 
     return $this->hasMany('App\Option'); 
    } 

} 

и

<?php namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Option extends Model { 

    // 

} 

Я пытаюсь вывести массив, который будет содержать все произведения искусства, которые имеют свои варианты вложенными внутри них. Вывод только художественных работ отлично работает ($ artworks = $ artwork-> get(), как показано ниже), но я не могу понять, как объединить/развернуть варианты в каждом оформлении.

Вот мой маршрут для этого

get('api/artworks','[email protected]'); 

А вот мой контроллер

<?php namespace App\Http\Controllers; 

use App\Http\Requests; 
use App\Http\Controllers\Controller; 

use Illuminate\Http\Request; 
use App\Artwork; 

class ArtworksController extends Controller { 


    public function index(Artwork $artwork) 
    { 
     $artworks = $artwork->merge($artwork->options())->get(); 
     return $artworks; 
    } 

} 

Я играл вокруг с этой функцией слияния(), и я просто не мог получить это право. Можно ли добиться этого с помощью merge()?

ответ

1

Вам просто нужно eager load в options отношений:

$artworks = $artwork->with('options')->get(); 
+0

удивительных, спасибо! – Bravi