2016-08-26 2 views
1

Я установил Laravel framework v5.3.2 и dimsav/aravel-translatable package v6.0.1. У меня возникла проблема с получением данных из отношения belongsTo() (родителя) на той же модели.Laravel 5 возвращает JSON вместо объекта on attribTo() отношение

category.php модель

class Category extends Eloquent 
{ 
    public $translatedAttributes = [ 
     'name', 'slug', 'description' 
    ]; 

    public function category() 
    { 
     return $this->belongsTo('App\Model\Category', 'category_id', 'id'); 
    } 

    public function categories() 
    { 
     return $this->hasMany('App\Model\Category', 'category_id', 'id'); 
    } 
} 

Метод для получения списка всех категорий:

$categoryModel = new Category; 
$categories = $categoryModel->with('category.translations')->get(); 

При печати имя атрибута в представлении, Laravel бросает исключение: «Попытка получить свойство не-объект».

<?php foreach ($categories as $category): ?> 
    Name: <?php echo $category->category->name; ?> 
<?php endforeach; ?> 

Но когда я пытаюсь получить значение как массив это работает:

<?php foreach ($categories as $category): ?> 
    Name: <?php echo $category->category['name']; ?> 
<?php endforeach; ?> 

Еще одна вещь, когда я пытаюсь var_dump ($ category-> категория) внутри Еогеасп я получаю это:

object(App\Model\Category)[221]... 

Результаты дд ($ категории) в поле зрения внутри Еогеасп:

Category {#231 ▼ 
    #table: "category" 
    +translatedAttributes: array:4 [▶] 
    +timestamps: false 
    #connection: null 
    #primaryKey: "id" 
    #keyType: "int" 
    #perPage: 15 
    +incrementing: true 
    #attributes: array:3 [▶] 
    #original: array:3 [▶] 
    #relations: array:2 [▼ 
     "category" => Category {#220 ▶} 
     "translations" => Collection {#228 ▶} 
    ] 
    #hidden: [] 
    #visible: [] 
    #appends: [] 
    #fillable: [] 
    #guarded: array:1 [▶] 
    #dates: [] 
    #dateFormat: null 
    #casts: [] 
    #touches: [] 
    #observables: [] 
    #with: [] 
    +exists: true 
    +wasRecentlyCreated: false 
} 

Таким образом, объект существует, но Laravel не показывает его должным образом, когда я пытаюсь получить доступ к атрибуту напрямую. Кто-нибудь знает, где проблема? Это в Laravel или, возможно, в ларавель-переводимом пакете?

ответ

0

Этот код возвращает коллекцию объектов:

$categoryModel->with('category')->get(); 

Но вы пытаетесь использовать его как объект, и именно поэтому вы получаете сообщение об ошибке.

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

@foreach ($categories as $category) 
    {{ $category->category->name }} 
@endforeach 
+0

Ok, пожалуйста, обновите ваш вопрос (или разместить где-то есле) с результатом '{{дд ($ категории)}} 'внутри цикла foreach, пожалуйста. –

+0

Обновленный вопрос. Хм странно, отношение категории равно нулю. Почему, если я попытался загрузить родительскую категорию загрузки? – fsasvari

+1

Может быть, у первой категории в коллекции нет категорий или еще чего-нибудь? –