Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
День добрый, хочется сделать каталог по такой схеме:
groups
таблица группа:
id
title
items
таблица товар
id
title
price
description
options
таблица параметры товара
id
title
value
items_options
таблица совмещения товара и параметров (у товара может быть несколько характеристик)
option_id
item_id
items_groups
таблица совмещения товара и группы (товар может принадлежать нескольким группам)
group_id
item_id
но вот как всё совместить? как будут выглядеть модели для этих таблиц?
например чтобы вывести все товары по id группы со всеми характеристиками?
ка вывести товар по id со всеми характеристиками?
как сохранить (при добавлении товара) в бд с характеристиками?
Изменено Сергей (03.02.2017 18:12:19)
Не в сети
каждая таблица это отдельная сущность (модель) в них ты связываешь все что тебе необходимо,
я бы value в таблице options перенес в items_options и добавил поле еще туда сортировка, вдруг захочется поменять местами характеристики, если будет какая-то конкретная сложность задавай, так у тебя вроде все просто
Не в сети
Сделал так:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Group extends Model
{
protected $table = 'groups';
public $timestamps = false;
protected $fillable = ['title'];
public function items()
{
return $this->belongsToMany('App\Item', 'items_groups');
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Item extends Model
{
protected $table = 'items';
public $timestamps = false;
protected $fillable = ['title', 'price', 'description'];
public function options()
{
return $this->belongsToMany('App\Option', 'items_options');
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Option extends Model
{
protected $table = 'options';
public $timestamps = false;
protected $fillable = ['sort', 'title', 'value'];
}
Пытаюсь вывести но ошибка Call to a member function items() on null
$group = Group::find(1)->items();
Не в сети
ошибся вот так:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Option extends Model
{
protected $table = 'options';
public $timestamps = false;
protected $fillable = ['title'];
}
Изменено Сергей (04.02.2017 13:21:18)
Не в сети
Вот так работает: но options не выводятся
public function index()
{
$group = Group::find(1);
echo $group->items;
}
Не в сети
а у вас опции должны идти вместе с группами ? или в определенном товаре?
Не в сети
а у вас опции должны идти вместе с группами ? или в определенном товаре?
в товаре, но я вывожу все товары из группы почему бы не вывести их характеристики
Не в сети
$group = Group::find(1);
echo $group->items->with('options');
почему with не присоединяется?
BadMethodCallException
Изменено Сергей (05.02.2017 12:34:05)
Не в сети
$group = Group::find(1);
$group->items->load('options');
var_dump($group->items);
или в модели Item указать что связь options всегда должна загружаться
Не в сети
спасибо
Не в сети
Подскажите как сделать поиск по значению в опциях
вот так не получается:
$group_main = Group::find($id);
return $group_main
->options()
->wherePivot('options.value', 'тест')
->wherePivot('options.option_id', 10)
->where('price', '>' , $min)
->where('price', '<' , $max)
->paginate(15);
Не в сети
Вылезает ошибка
Unknown column 'items_groups.items_options.option_id'....
всё правильно в таблице items_groups нет items_options.option_id
как именно в items_options сделать 'where '
Не в сети
если поиск осуществлять в options то выводятся теже товары только с массивом options где присутствует в value 23
public function options()
{
return $this->belongsToMany('App\Option', 'items_options')->where('value', '23')->withPivot('sort', 'value');
}
Не в сети
Страницы 1