Например, у меня есть Продукт, и у меня есть 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"); }