Версия laravel 5.0.34
Хочу вывести все товары , которые относятся к категориям.
Подскажите плиз почему при вызове
$comments = \App\category::find(1)->products()->all();
Возвращается ошибка "Call to a member function products() on a non-object"
Сделал связь один ко многим.
Модель с таблицей продуктов:
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class product extends Model {
protected $table = 'products';
public function category()
{
return $this->belongsTo('App\category','id', 'category_id');
}
}
Модель с таблицей категорий:
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class category extends Model {
protected $table = 'categories';
public function products()
{
return $this->hasMany('App\product' ,'category_id', 'id');
}
}
вызываю эту связь из метода контроллера:
<?php namespace App\Http\Controllers;
use App\category;
use App\product;
....
public function categoryItem(category $categoryModel,product $productModel ) {
$comments = \App\category::find(1)->products()->all();
}
таблицы:
CREATE TABLE `products` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`title` VARCHAR(255) NOT NULL DEFAULT '0',
`img` VARCHAR(255) NOT NULL DEFAULT '0',
`intro_text` VARCHAR(255) NOT NULL DEFAULT '0',
`status` INT(1) NOT NULL DEFAULT '0',
`full_text` TEXT NOT NULL,
`slug` VARCHAR(50) NOT NULL,
`price` INT(11) NOT NULL,
`category_id` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=6
;
CREATE TABLE `categories` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`title` VARCHAR(255) NOT NULL,
`full_text` TEXT NOT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
`slug` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=7
;