Laravel Fetching один ко многим Отношения - PullRequest
0 голосов
/ 01 декабря 2018

Здравствуйте, я изучаю laravel, и у меня возникла проблема с получением данных из моих отношений.

В моей базе данных есть продукт и группы, заполненные фиктивными данными.

Я определил мои отношения следующим образом в модели продукта:

     public function Group()
        {
     return $this->hasMany('App\Groups','product_id', 'id');
      }

И в моей группе наоборотс:

      public function Product()
      {
      return $this->belongsTo('App\Product','product_id', 'id');
      }

Я ссылаюсь на таблицу продуктов следующим образом:

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

Теперь у меня есть столбец product_id в моей базе данных в группах, и он связан с if из продуктов.id это кажется.

Таблица groups содержит свой автоматически увеличенный id и столбец внешнего ключа product_id.

В то время как в таблице товаров есть столбец идентификатора и имени с автоинкрементом.

Проблема заключается в следующем: Как вернуть товары, которые не равны нулю или имеют значение (идентификатора товара) в таблице групп.


Я пытался что-то подобное в моем контроллере фильтра:

        public function getProductsWithGroup()
{

      $Products = Product::with('groups')->get();
     return $Products ;

}

Но это вызывает у меня неопределенные отношения.

Я не уверен, какДоступ к методам ownTo или hasMany, и нужен ли мне дополнительный столбец group_id в моей таблице продуктов.

1 Ответ

0 голосов
/ 01 декабря 2018

Вы назвали отношения неправильно.Он должен быть groups и определяться в нижнем регистре как

public function groups()
{
    return $this->hasMany('App\Groups','product_id', 'id');
}

И использовать ->has() для проверки существования

public function getProductsWithGroup()
{
    $Products = Product::has('groups')->get();
    return $Products ;
}

->with() используется для нетерпеливой нагрузки и ->has() используется для проверки существования & фильтра .

Чтобы получить продукты, не имеющие групп,

$Products = Product::doesntHave('groups')->get();

Чтобы увидеть другие способы использования ->has() проверить, https://laravel.com/docs/5.7/eloquent-relationships#querying-relationship-existence

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