На самом деле я пытаюсь создать приложение электронной коммерции в Laravel и иметь следующий макет базы данных...
СТОЛОВЫЕ ПРОДУКТЫ: product_id ПК, материал, описание, идентификатор_бренда, id_категории,
ТАБЛИЦА PRODUCTS_CHILDREN: я бы, ску, цвет, цена, размер, количество, product_id (FK для таблицы продуктов)
Сейчас я новичок в Laravel, но я думал создать приложение для электронной коммерции и просто хотел решить эту проблему, прежде чем заходить слишком далеко.
Мой вопрос: есть ли способ при отображении продуктов также получать дочерние продукты?
Мой мыслительный процесс был таким:
Товары -> получить( product_id, $product_id ) -> getChildren( product_id, product_id );
Я знаю, что синтаксис неверен, мне просто интересно, было ли это возможным решением в Laravel - путем цепочки запросов (как я полагаю, это характерно для фреймворка Laravel).
Я думаю, что я спрашиваю, как будет выглядеть синтаксис блейда при отображении данных?
Судя по тому, что я видел в учебниках, кажется, что это сработает, но я просто хотел подтвердить. Спасибо за любую помощь!
Да, это сработает, если вы настроите отношения, следуя документация.
Например, в вашем примере у вас будет две модели: одна для таблицы products и другая для таблицы products_children (я бы назвал их: Товар и Вариант соответственно).
Между ними у вас будет отношение 1:Н (у одного товара может быть много вариантов, один вариант принадлежит одному и только одному товару).
Таким образом, вы можете смоделировать отношение следующим образом: Модель: Продукт
class Product
{
// Other methods/properties...
public function variants()
{
return $this->hasMany(Variant::class);
}
}
Модель: Вариант
class Variant
{
// This is needed, otherwise Laravel would search for a
// table called as the pluralized model name's (eg: variants)
protected $table = 'products_children';
// Other methods/properties...
public function product()
{
return $this->belongsTo(Product::class, 'products_children');
}
}
После того, как вы настроите отношения таким образом, вы можете связать методы, такие как ваш пример:
// Assuming $id is the variable holding the product id you want to retrive
$product = Product::find($id);
$variants = $product->variants;
// You can now access the main Product properties, but you can also
// iterate through each Variant entity linked to that product.
В зависимости от варианта использования запроса последний запрос может быть не оптимальным способом его выполнения. Иногда вам приходится с нетерпением загружать отношение для всех объектов, которые вы запрашиваете. Если вы хотите более подробно изучить эту тему, обратитесь к официальной документации.
Отказ от ответственности: Код, который я написал, это просто PoC, и он не тестировался. Он был написан, чтобы дать краткий обзор того, насколько просто настроить и использовать отношения между моделями.