• Как сделать подстановку из массива?

    Так не работает?

    $cities = require __DIR__ . "/config/cities.php";
  • Как сделать подстановку из массива?

    lasthero67, если файл cities.php лежит в той же директории что и ваш index.php ну или тот файл который исполняет ваш код то да можно так

    $cities = require __DIR__ . "/cities.php";

    Если файл находится в другой директории используйте
    ../
    Чтобы добраться до нужной папки

    Пример
    Файл index.php лежит относительно корня тут:
    /src/pages/index.php

    А файл с городами относительно корня тут:
    /src/configs/cities.php

    То код будет примерно таким:
    $cities = require __DIR__ . "/../configs/cities.php";


    т.е. первые две точки и слеш мы выходим из папки pages, а затем входим в папку configs

    Ну и разумеется файл должен возвращать массив, те в файле должен быть php-тег и return ...
  • Как сделать подстановку из массива?

    lasthero67, не понял, у вас что файл на удаленном сервере? Ну то есть код на одном а файл с настройками городов где то в другом месте? Какой у вас php, фреймворк или что у вас там где ваш код крутится хостинг обычный или выделенный сервер?
  • Как сделать подстановку из массива?

    Хотя честно говоря почему бы не использовать какое нибудь хранилище и иниерфейс в вебе ну или консольную команду для ведения учета городов?
  • Как сделать подстановку из массива?

    lasthero67, заполнять, в потом парсить, это по вашему проше? Если вы хотите совсем просто то лучше сразу php массив в файле с ключами название и значением айди ну или наоборот и функцию как я написал
  • Laravel как создать связь через несколько таблиц?

    jazzus, я думаю нет смысла с вами спорить, так как конструктивного диалога с вами не получится с вашим обсервером, сидингами и тестами.

    Вы сначала приведите пример, как у вас организована работа начиная с контроллера и тд, чтобы можно было сравнить ваш и мой код.

    Какой процент покрытия в вашем проекте? Что вообще за проект у вас, простенький магазинчик с двумя складами и офисом, CRM или ERP?

    А то создается ощущение, что со мной общается диванный эксперт, который не работал в команде скажем человек 5-7 человек, и не знает или не понимает, что кроме вашего мнения есть еще и другие.
  • Laravel как создать связь через несколько таблиц?

    Вы дробите код на простые сервисы, через DI из иньектите практически в любой класс

    Так вы сможете переиспользовать ваши компоненты, например когда в разных контроллерах вам нужно получить список складов вы просто добавляете метод

    getWarehouses()

    В репозиторий складов, подключаете сервис репозитория прямо методе контроллера и вызываете нужный метод

    Так код чище и работать с ним приятнее
  • Laravel как создать связь через несколько таблиц?

    Это просто пример, как организовать работу через репозитории, из удобно подключать через DI в сервисах, контроллерах и тд

    Использовать это можно, если вы не хотите создавать новые слои например так

    Контроллер
    ...
       public function store(Request $request)
       {
            $this->dispatchNow(
                new CreateWarehouseCommand(
                    $request->user(),
                    $request->validated()
                )
            );
        }
        ...


    Команда
    class CreateWareHouseCommand
    {
        private User $user;
        private array $data;
    
        public function __construct($user, $data)
        {
            $this->user = $user;
            $this->data = $data;
        }
    
        public function handle(WarehouseService $service)
        {
             DB::transaction(function () use ($service) {
                 $service->create($this->user, $this->data);
                 // если надо создать что то еще можно вызывать другие сервисы
             });
        }
    }


    Сервис
    class WarehouseService
    {
        private $repository;
    
        public function __construct(WarehouseRepository $repository)
        {
             $this->repository = $repository;
        }
    
        public function create(User $user, array $data): void
        {
             $model = $this->newModel();
             $model->fill($data);
             $model->author()->associate($user);
    
             $this->repository->save($model);
        }
    
        private function newModel(): Warehouse
        {
            return App::make(Warehouse::class);
        }
    
        ...
        
        // update, delete, ....
    }


    Это просто организация слоев для того, чтобы было удобнее разграничивать ответственность каждого компонента.

    Выделяя работу с БД в репозитории вы сможете в тестах замокать и протестировать юнитами всю бизнес-логику.

    Командный слой позволяет обеспечивать транзакционность сложных дествий, например когда вместе с созданием склада создается еще чтотто например филиалы и сотруники к нему.

    Одно без другого не может быть поэтому либо создается все либо ничего.

    В дальнейшем в команду можно добавить обращение к слою бизнес валидации и тд
  • Laravel как создать связь через несколько таблиц?

    Yariy, тогда может вам нет смысла такой рилейшен пилить встроенными средствами.

    Вам для чего надо?
    Точнее сделайте репозиторий типа такого:

    interface RepositoryInterface
    {
        public function save(Model $model): void;
        public function delete(Model $model): void;
    }
    
    trait RepositoryTrait
    {
        abstract protected function getModel(): Eloquent\Model;
    
        private function getQuery(): Eloquent\Builder
        {
            return $this->getModel()->getQuery();
        }
    
        public function save(Model $model): void
        {
             $model->save();
        }
    
        public function delete(Model $model): void
        {
             $model->delete();
        }
    }
    
    
    class Warehouse implements RepositoryInterface
    {
           use RepositoryTrait;
    
           public function getByUser(User $user): Eloquent\Collection
           {
               return $this
                   ->getQuery()
                   ->leftJoin(филиалы...)
                   ->leftJoin(пользователи...)
                   ->where(пользователь = $user)
                   ->get();
           }
    
           protected function getModel(): Eloquent\Model
           {
              return App::make(Warehouse::class);
           }
    }


    И тд наделайте под каждую сущность репозитории и получайте свои связи через кастомные квери

    Ведь в конечном итоге вам нужны ведь данные чтобы их где то отобразить?
  • Laravel как создать связь через несколько таблиц?

    Из коробки - Никак.

    Не из коробки - есть такой класс Relation, от него унаследованы все BelongsTo, И так далее

    Реализуйте новый класс рилейшена и выстроите цепочку через несколько таблиц, а еще лучше в гитхаб сразу и собирайте звезды. Думаю всем пригодится. Если такой рилейшн будет поддерживать eagerLoading, и будет работать через with