Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Хотелось бы узнать, смогу ли я реализовать следующее:
Есть следующие сущности: оборудование, расходники и ячейки. Оборудование и расходники могут лежать в ячейках.
Для оборудования в безе создается запись для каждой единицы оборудования, а для расходников в базе фиксируется только название расходника, некое описание (например Ч/Б картридж ABC123 для принтера SUPERPRINTER-123), а количество данного расходника не фиксируется. Т.е. данного расходника физически может быть 5 штук и каждый из этих пяти может лежать в отдельной ячейке.
Т.о. получается:
- в ячейке может лежать как единица оборудования, так и расходник (Morph Relation)
- одна единица оборудования (одна запись в БД) может лежать только в одной ячейке (один к одному)
- одна единица расходника (одна запись в БД) может лежать в нескольких ячейках (один ко многим)
Сразу вопрос: это реалезуемо в Laravel? Т.е. полиморфные связи и одновременно один ко одному и один ко многим.
Структура таблиц
Cells
id
name
content_type
content_id
Equipment
id
name
Suplies
id
name
Модели
class Cell extends Model {
public function content()
{
return $this->morphTo();
}
}
class Equipment extends Model {
public function cell()
{
return $this->morphOne('App\Cell', 'content');
}
}
class Suply extends Model {
public function cell()
{
return $this->morphMany('App\Cell', 'content');
}
}
Вопрос 2
Ячейка может быть пустая. Т.е. поля content_type и content_id могут быть пустыми
Как мне удалить связь из ячейки (очистить поля выше), не удаляя при этом ячейку?
Т.е сохранить могу:
$equipment = Equipment::find($equipment_id);
$cell = Cell::find($cell_id);
$equipment->cell()->save($cell);
А вот как очистить ячейку?
Изменено netman2002 (12.09.2019 10:56:32)
Не в сети
Сразу вопрос: это реалезуемо в Laravel?
Laravel может работать со всеми вариантами отношений, которые ты перечислил. Так что да. Если ты можешь это выразить в терминах реляционной базы, то это реализуемо на Laravel.
Т.е. полиморфные связи и одновременно один ко одному и один ко многим.
По-моему это чушь. Надо переосмыслить какие реально нужны связи.
Мне кажется ты упустил такой момент, что есть наименование (или тип) товара и есть единица хранения товара - штука, упаковка и т.п. Единиц одного наименования может быть много и они могут быть разложены по ячейкам. Не наименование товара раскладывается, а экземпляр.
Видимо, отношение экземпляра к ячейке один-к-одному. Возможно полиморфиный, я не уверен. Я бы пытался сделать просто с минимальным набором сущностей, и только когда не получается просто, тогда усложнять.
Наименование товара к экземплярам товара относится как один-ко-многим.
Тип расходник/оборудование можно описать булевым или enum полем в таблице наименований. Свойства товара разместить в одной "широкой" таблице с nullable полями на все случаи жизни. Я не вижу здесь жёсткого требования заводить по отдельной таблице на каждую разновидность товара. Можно да, но можно и нет.
Не в сети
Спасибо за ответ.
А кто-нибудь знает, как ответить на второй вопрос?
Как удалить связь в таблице Cells не удаляя ячейки и единицы оборудования?
Всё, разобрался...
$equipment = Equipment::find($equipment_id);
$cell = Cell::find($cell_id);
$cell->content()->associate( $equipment );
$cell->save();
или
$cell->content()->dissociate();
$cell->save();
Изменено netman2002 (13.09.2019 13:03:40)
Не в сети
Страницы 1