Laravel hasMany вернуть ноль - PullRequest
       0

Laravel hasMany вернуть ноль

0 голосов
/ 15 ноября 2018

У меня есть модель Категория:

class Category extends Model
{
    protected $fillable = ['title', 'description', 'keywords', 'slug'];

    public function getRouteKeyName()
    {
        return 'slug';
    }

    public function products()
    {
        return $this->hasMany(Product::class);
    }
}

И есть модель продукта:

class Product extends Model
{

    protected $guarded = [];

    public function category()
    {
        return $this->belongsTo(Category::class);
    }
}

В таблице товаров у меня есть товар с колонкой category_id. Но вернуть ноль. Зачем? Я не могу получить продукты в текущей категории с $category->products, потому что всегда пуст. Как я могу это исправить?

В модели продукта отношение category работает, но на модели category не работает ..

На столе у ​​меня есть каскад:

$table->foreign('category_id')
    ->references('id')->on('categories')
    ->onDelete('cascade');

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

Все правильно, просто внесите изменения в миграцию продуктов изменить этот код

$table->foreign('category_id')->references('id')
->on('categories')->onDelete('cascade');

до

$table->foreign('category_id')->references('id')
->on('products'->onDelete('cascade');
0 голосов
/ 15 ноября 2018

Пожалуйста, внесите следующие изменения

  1. Внесите изменения в файл миграции продукта (в таблице продуктов)

     $table->integer('category_id')->unsigned();
     $table->foreign('category_id')->references('category_id')->on('categories');
    
  2. Затем измените модель категории

    public function products()
    {
        return $this->hasMany('App\Product','category_id');
    }
    

3. Затем получите все категории со списком продуктов

use App\Category   
             // include category model where you want to call this function
Category::with('products')->get();
0 голосов
/ 15 ноября 2018

Подтвердите свое определение

return $this->hasMany('App\Product', 'category_id');

У вас есть ошибка здесь, потому что прикрепить на catergories, но это будет на продуктах

$table->foreign('category_id')
    ->references('id')->on('products')
    ->onDelete('cascade');

https://laravel.com/docs/5.6/eloquent-relationships#querying-relations

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...