2014-10-09 5 views
0

У меня возникли проблемы с выводом реляционных данных. Я пытаюсь получить заголовок из класса producttypes, который он говорит. Попытка получить свойство не-объекта, я пробовал разные способы, но я не получение желаемого результатародственные отношения laravel принадлежат

class Product extends \Eloquent { 

    public function producttype() { 
     return $this->belongsTo('ProductTypes', 'producttype_id'); 
    } 

} 

class ProductTypes extends \Eloquent { 

    public function products() { 
     return $this->hasMany("Product", 'id'); 
    } 
} 

$product->producttype->title 

Update

class ProductTypes extends \Eloquent { 
    protected $fillable = ['keywords', 'description', 'title', 'slug']; 
    protected $table = "producttypes"; 

    public function products() { 
     return $this->hasMany("Product", 'product_id', 'id'); 
    } 
} 

class ProductVariations extends \Eloquent { 
    protected $table = "productvariations"; 
    protected $fillable = ['product_id', 'producttype_id', 'price', 'quantity', 'discount', 'image']; 


    public function product() { 
     return $this->belongsTo('Product'); 
    } 
} 

public function show($id) 
{ 
    $product = Product::with('producttype')->findOrFail($id)->get(); 

    return View::make('products.show')->withProduct($product); 
} 

Показать страницу

$product->producttype->title 
+0

показать свои таблицы. –

ответ

0

у вас есть для получения значений базы данных таким образом

$product = Product::with('producttype')->get() 

попробуйте этот.

, пожалуйста, разместите этот код в файле routes.php внизу всего остального .. только для целей тестирования.

Route::get('/', function(){ 
    $product = Product::with('producttype')->get(); 
    dd($product); 
}); 

Метод get() возвращает результат в массиве с несколькими объектами, а firstOrfail возвращает только объект. Вот почему вы получаете исключение вызова метода non-object. попробуйте dd() результирующий набор, и вы узнаете

+0

Точно, где я помещаю эту функцию, попытался поместить ее в класс продукта в productstypes(), и я получу эту ошибку. Максимальный уровень вложенности функции «100» достигнут, прерывается! – ONYX

+0

В классе продукта productstypes() - это функция, в которой вы определили свою принадлежность к отношениям. попробуйте это в файле маршрута. Я обновляю свой ответ только для целей тестирования. – justrohu

+0

Я добавил это в шоу-маршрут $ product = Product :: findOrFail ($ id) -> с ('producttype') -> get(); – ONYX

0

Вы должны быть уверены, что запрос возвращает объект, а не коллекцию. Если вы используете запрос where, вы получаете коллекцию объектов, если вы не добавите в свой запрос -> firstorfail(). Если вы используете «Model :: Find (id)», вы получаете объект, поэтому вы можете использовать этот метод. Посмотрите на querying-relations красную ноту в конце этого раздела.

Вы должны попробовать

public function show($id) 
{ 
    $product = Product::Find($id); 

    return View::make('products.show',['product'=>$product]); 
} 

Тогда в ваших методах продукта просмотра будут доступны

$product->producttype; 
$product->productvariation //You should add this method to the product class 
+0

Я отредактировал свой ответ, посмотрю – geoandri