Как получить все результаты от отношения hasMany () в Laravel?

Например, у меня есть Продукт, и у меня есть BaseProduct.

В модели для продукта я указал следующее:

//In class Product public function BaseProduct() { return $this->belongsTo("BaseProduct", "BaseProductId"); } 

В BaseProduct я указал следующее соотношение:

 //In class BaseProduct public function Products() { return $this->hasMany("Product", "ProductId"); } 

Если бы я хотел выбрать продукт, вот так:

 $Product::first() 

Я могу получить BaseProduct, выполнив следующие действия:

 $Product::first()->BaseProduct()->get(); 

Вместо того, чтобы получить массив результата от этого, как бы получить Model BaseProduct, чтобы я мог получить все дочерние элементы BaseProduct, что означает все продукты, у которых есть внешний ключ, относящийся к этому BaseProduct.

Я пробовал BaseProduct()->all(); вместо этого, но это недействительный метод.


Редактировать:

Я создал следующую цепочку вызовов функций, но это ужасно.

 return BaseProduct::find(Product::first()->BaseProduct()->getResults()['BaseProductId'])->Products()->getResults(); 

Окончательное редактирование:

Я ошибся в своей модели BaseProduct . В функции Products() я указал return $this->hasMany("Product", "ProductId"); где ProductId должен был быть BaseProductId .

После того, как я исправил это, я мог бы успешно использовать:

 Product::first()->BaseProduct->products; 

Как объяснил шейх Хера.

Чтобы получить детей из BaseProduct вы можете попробовать следующее:

 $bp = BaseProduct::with('Products')->get(); 

Теперь у вас есть коллекция BaseProduct поэтому вы можете использовать что-то вроде этого:

 $bp->first()->products 

Или получить второй элемент из коллекции

 $bp->get(1)->products 

Кроме того, вы можете запустить такой цикл (скорее всего, в представлении после его прохождения):

 // From the controller $bp = BaseProduct::with('Products')->get(); return View::make('view_name')->with('baseProduct', $bp); 

В View

 @foreach($baseProduct->products as $product) {{ $product->field_name }} @endforeach 

Обновление: да, вы можете попробовать это

 $product = Product::first(); $baseProduct = $product->BaseProduct; // Dump all children/products of this BaseProduct dd($baseProduct->products->toArray()); 

Вы можете цепью, как:

 Product::first()->BaseProduct->products; 

Обновление: ваша структура таблицы должна выглядеть примерно так:

Таблица: базовый продукт :

 id(pk) | some_field | another_field 

Таблица: продукция :

 id(pk) | baseproduct_id(fk) | another_field 

Согласно этой структуре таблицы, отношения должны быть

 // BaseProduct public function Products() { return $this->hasMany("Product"); } // Product public function Products() { // second parameter/baseproduct_id is optional unless // you have used something else than baseproduct_id return $this->belongsTo("BaseProduct", "baseproduct_id"); }