Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Laravel 6/7/8/9/10 » Query Builder - Функции замыкания » 31.07.2020 09:00:24

netman2002
Ответов: 2

Коллеги, я не совсем понимаю, как правильно писать функции замыкания.

Например:
...
->where(function($query){
   $query->where('field', $num);
})

или так:
...
->where(function($query){
   return $query->where('field', $num);
})

В ранних версиях вроде как нужно было писать return $query, теперь проверяю без return - работает...

#2 Re: Laravel 5.x » Polymorphic Relationships » 13.09.2019 12:07:52

Спасибо за ответ.

А кто-нибудь знает, как ответить на второй вопрос?
Как удалить связь в таблице Cells не удаляя ячейки и единицы оборудования?

Всё, разобрался...

$equipment = Equipment::find($equipment_id);
$cell = Cell::find($cell_id);

$cell->content()->associate( $equipment );
$cell->save();

или

$cell->content()->dissociate();
$cell->save();

#3 Laravel 5.x » Polymorphic Relationships » 12.09.2019 10:46:19

netman2002
Ответов: 2

Хотелось бы узнать, смогу ли я реализовать следующее:

Есть следующие сущности: оборудование, расходники и ячейки. Оборудование и расходники могут лежать в ячейках.
Для оборудования в безе создается запись для каждой единицы оборудования, а для расходников в базе фиксируется только название расходника, некое описание (например Ч/Б картридж 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);

А вот как очистить ячейку?

#4 Laravel 5.x » Self relationship - Как реализовать » 01.04.2019 14:02:09

netman2002
Ответов: 1

Суть вопроса примерно следующая...

Есть куча таблиц, включая таблицу с пользователями. В каждой таблице я хочу добавить поля: created_by и updated_by (т.е. кем создана запись и кем модифицирована). Эти два поля - это ссылки на id конкретного пользователя. Таблица с пользователями также должна иметь данные поля. Т.е. создали нового пользователя, соответственно записываем кто создал (или изменил).
Таким образом, обращаясь к свойству created_by (updated_by) я хочу получить объект "Пользователь", как для модели "Пользователь", так и для остальных моделей.

Например, ограничимся двумя моделями: User и Customer (организация). Пользователь может быть представителем только одного заказчика (организации), а организация может иметь много пользователей. Это классическая схема и с ее реализацией проблем нет:

class User extends Authenticatable
{
    ...
    public function customer()
    {
        $this->belongsTo('App\Customer');
    }

}

class Customer extends Model
{

    public function users()
    {
        $this->hasMany('App\User');
    }

}

А как реализовать соотношения для полей created_by (updated_by)?

Подвал раздела