Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Магазин на базе Laravel 5.4.
Есть заказы на две страны: 1 и 2.
Мне нужно чтоб менеджер из 1 страны видел только заказы для страны 1, соответственно 2 менеджер видел только заказы с страны 2.
Понятно что в базе можно сделать поле, с отношением ... еще можно сделать связующую таблицу.
А что если завтра появиться третья страна и мне надо будет менеджеру 1 предоставить доступ к записям страны 3, и новому менеджеру 3 предоставить доступ к стране 3.
Как можно гибко это реализовать? И самое главное понять!!!
я так понимаю что мы имеем юзеров
1 2 3 … X
и имеем группы, фактически юзеры не имеют доступов ни к чему, имеют только группы.
Те создаем таблицу groups, и при создании в ней записи группы скажем
1 - managaers Russia
2 - managers Ukraine
Создаем таблицу связывающую таблицу users и groups, называем ее connection
где будут перечисляться ID юзеров и соответственно ID группы в которую он имеет отношение. И так может 1 юзер у нас иметь отношение сразу в несколько групп.
Также для заказов будет еще своя таблица связывающая connection_perm
в которой мы указываем ID страны, и ID группы может работа с этой страной. И так мы можем к каждой стране атачить несколько групп.
Вот я примерно так вижу, может сильно запутанно?
-----------
еще как вариант сделать ответственного за конкретный заказ, согласно каким то критериям, например. Зашел заказ… мы создаем правило:
если заказ содержит russia то мы направляем рандомному то из отдела managers russia, ну или показываем всем пока кто то не кликнул на кнопку взял заказ например он исчезает из входящего пула и становиться доступен только ответственному человеку. Вообще такая система реализована в битриксе, как бы логически продумать ее у себя, там очень гибко можно правила настраивать. Есть по сути только менеджеры и доступ к сущностям как бы стандартная система уровня доступов.
Есть проще вариант?
Спасибо за помощь!
Ок, спасибо посмотрел тонну уроков на ютуюбе.
Поправьте если я верно понял как мне нужно сделать.
Нужно создать три сервиса для каждого из курьеров которые будут доставлять товар.
Связать их одним сервис провайдером:
public function register(){
$this->app->bind('curier_1','App\Servises\curier_1');
$this->app->bind('curier_2','App\Servises\curier_2');
$this->app->bind('curier_3','App\Servises\curier_3');
}
Далее нужно создать один фасад, под этого одного сервис провайдера?
Ну я предполагаю что фасад нужен для того чтобы можно было вызывать статические методы для созданных объектов, однотипных классов.
Ну например:
Курьеров у нас ТРИ, функционал у них всех одинаковый взаимодействия, только начинка разная. Значит мы можем сделать один фасад под все три класса? Поправьте пожалуйста, совсем запутался.
И еще как мне сделать так, чтоб при запросе bootstrap данный сервис провайдер не включался при каждом его выхове, так как он мне нужен только при запуске консольной одной команды.
Спасибо за ответы!
Привет всем. Есть небольшой магазинчик на ларавель, доставку осуществляют несколько курьеров, планирую в консоле сделать команду которая будет при запуске по крону отправлять какому то курьеру, по логике скрипта, через API.
Проблема:
Под каждого курьера надо написать свой класс сопряжения с их API. Куда лучше и грамотнее выносить такие классы. В данном случае должно быть их три. Это в папку vendor или как лучше сделать, именно архитектурно. И как потом это внедрить именно в ларавель, где то надо же их зарегистрировать чтоб использовать.
Можно какие то примеры пожалуйста? Ну или ссылку на оные.
Спасибо за ответы!
Здравствуйте! спасибо за то что помогаете.
Но к сожалению данный код выдает ошибку
[Illuminate\Database\QueryException]
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'created_at' i
n where clause is ambiguous (SQL: select * from `purchases` inner join `goo
ds` on `purchases`.`good_id` = `goods`.`id` and `goods`.`test_product` = 0
where `tracker_number` is null and date(`created_at`) = 2018-06-01)
[PDOException]
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'created_at' i
n where clause is ambiguous
Есть две таблцы
goods - товары
purchases - заказы
В goods есть поле test_product которое может быть либо 0 либо 1 - это означает товар на тестовый или нет.
purchases тут собственно все заказы скидываются, и таблица purchases связана с goods через внешний ключ good_id.
Также в поле purchases есть поле tracker_number сюда пишу номер трекинга после того как товар прошел проверку на складе, по умолчанию поле NULL.
Мне нужно отправлять на склад товар для получения номер tracker_number. Для этого нужно сделать выборку из двух таблиц:
purchases где все tracker_number = NULL и каждый товар НЕ тестовый, те в таблице goods поле test_product должно быть = 0.
Я делаю так:
$purcases = DB::table('purchases')
->whereNull('tracker_number')
->whereDate('created_at','=', Carbon::today()->toDateString())
->join('goods', function ($join) {
$join->on('purchases.good_id', '=', 'goods.id');
->where('goods.test_product','=','0');
})
->get();
но он говорит что ошибка. Помогите составить нормально запрос пожалуйста.
Спасибо что потратили свое время!
я таки думаю, что все таки должен какой то быть инструмент нормальный, нельзя описывать каждую опцию в контролере и в посреднике и тд. Оно должно ка кто целостно идти одним блоком, это просто чувство такое , ну какой то отдельный класс который умеет работать с фильтрами
Есть админка в ней есть вывод товаров, листинг с пагинацией, продукт имеет два варианта: активный и не активный.
В листинге есть настройки вывода:
1. Показать активные
2. Показать не активные
3. Кол-во товаров на страницу (пагинация)
http://take.ms/xSHdo - скришот настроеек у админа
-------------------------
Я конечно написал
Сначала у меня срабатывает посредник, который ловит куки админа, типа если есть в куках
отметены:
https://paste.laravel.io/433efded-4cdc- … 284a512d65
После я уже разбираю все через конфиг:
https://paste.laravel.io/ff9a90ba-4d6c- … 18176bc51f
Ну и на отображение.
Но мне кажется можно сделать это как то по другому в плане умнее что ли или логичнее.
Покритикуйте пожалуйста, только конструктивно с предложением.
Сразу скажу ответ на вопрос, зачем $options_admin['options_admin']['good_list'] - затем что посредник будет использовать еще и для других листингов в админке.
Спасибо за ранее, что потратили время!
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PublicToolsSupportPost extends Controller
{
public function execute(Request $request){
dd($request);
}
}
и вьюха
https://paste.laravel.io/f163239d-af07- … 6a17af1788 - чтоб тут не сорить сильно
Вопрос. Почему dd пустой реквест показывает ну данных полей нет все по null.
можно без кеев просто отдаешь строку и он там сам разбирает /1,2/green/...
просто я не знаю сколько там будет переменных, они динамические у меня, не ну
Привет всем!
Каким образом в реквест можно засунуть новую строку GET чтоб он автоматически все заменил там поля.
Ну например входящий урл /c2RzZmFzZmFmc2Zkcw я его декодирую в роутере прям и в реквест как то скормить надо без ридеректа урл декодированный чтоб он заменил там все поля на декодированые.
На входе c2RzZmFzZmFmc2Zkcw, потом декодирую его, а в реквест надо засунуть /1,2/green/... - это декодированный уже.
Ну есть же у реквеста какая то входящая переменная которая принимает строку всю GET и потом разбирает ее заполняя свои поля, просто подменив входные данные так сказать в уже созданном объекте класса.
добавил в дамп руками
ALTER TABLE `comments`
ADD CONSTRAINT `comments_good_id_foreign` FOREIGN KEY (`good_id`) REFERENCES `goods` (`id`);--
-- Constraints for table `descriptions`
--
ALTER TABLE `descriptions`
ADD CONSTRAINT `descriptions_good_id_foreign` FOREIGN KEY (`good_id`) REFERENCES `goods` (`id`);ALTER TABLE `descriptions`
ADD CONSTRAINT `descriptions_domain_id_foreign` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`);
И сработало, почему через запрос именно оно не работает ничего не понимаю. Ни через laravel ни через phpmyadmin
а можете дамп дать? спасибо что сделали тест ...
я в логи MYSQL смотрел там вообще не понятное что то
2018-02-20 15:47:21 700005b32000 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.
2018-02-20 15:47:21 700005b32000 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.
2018-02-20 15:47:21 700005b32000 InnoDB: Error: Fetch of persistent statistics requested for table "devshop"."#sql-841_25" but the required system tables mysql.innodb_table_stats and mysql.innodb_index_stats are not present or have unexpected structure. Using transient stats instead.
2018-02-20 15:47:21 700005b32000 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.
Прошу прощения но без дампа тут ни как не обойтись, но я уже неделю просто мучаюсь и не как не могу решить данную проблему, если кто то поможет я буду очень благодарен. За ранее спасибо.
https://drive.google.com/file/d/1jAsfA7 … sp=sharing
Это дамп структуры базы.
пытаюсь создать внешний ключ на таблицу domains
ну и получаю вот такую ошибку:
Может кто попробует у себя воспроизвести, но у меня не получается ни как блин этого сделать. Я уже все перепробовал.
Привет всем!
И так есть консольная команда, которая по крону будет запускаться и по API курьеров скидывать им заказы с магаза.
app\Console\Commands — тут я создал файлик типа исполняемый send.php
vendor\APISend\ — а тут положил либу, ну класс там всего один, дали курьеры
Хотел вендора этого зацепить через json а потом подума6 нафига мне он будет загружаться когда будет стартовать все приложение. Скажите как мне инкулдить его (vendor\APISend\) по грамотному именно только для этого send.php?
Может так:
use vendor\APISend;
А дальше как обратиться к классу? который в APISend
Вроде задача логическая но думаю как сделать красивее. И так:
Есть коллекция изображений:
Каждое изображение имеет свой ID ну из базы конечно же, и имеется входящий массив данных для сортировки типа
[23,20]
Теперь надо сортировать коллекции массив чтоб на первом месте там в коллекции был сначала картинка под ID 23 а след. 20.
Можно сделать коллекцию новую и выдергивать по мере прохождения массива [23,20] туда картинки, ну и потом что останется докинуть уже без сортировки.
Вариант два, сделать сразу в модели какой то хитрый запрос в базу , но я не знаю как...
Может есть более изящные решения?
Нужно для реализации след функционала:
юзер дает в урле get запрос типа, images=23,20 я его ловлю, и говорю движку что выводить картинки надо именно в этом порядке, сначала картинку под id 23 потом под 20, ну слайдер. Так гибко получается очень, человек может меняя урл задавать разные параметры сортировки изображений в разных ситуациях.
да логично, спасибо!
ну вот сейчас у меня параллельно работает моего собственного написания магаз без laravel, и как раз там система с одной базой, но на каждом домене своя копия скриптов. Минусов тьма, например в системе обновления, 14 доменов обновить поверьте мне и правильно обновить это не реальная задача, да и это не единственное что самое плохое. Я думаю ду лучше ловить хост и в env насильно просто переназначать хост. По идеи должно сработать. А от туда вытаскивать собственно уже и писать в базу что такой то домен принес заказ, сделать доп таблицу просто доменами и их ID раскидывать в заказы. Вобщем такой вот план.
Не усложняйте себе жизнь. Если у вас только общая бд, клонируйте ваш ларавел проект по доменам и используйте общую базу. Я бы использовал deployer для автоматизации деплоя проекта
так я не усложняю это требования разработки. Склад один а баз будет 33? Это как раз и будет вызывать глобальные трудности.
Делаешь одно приложение и все домены направляешь на него. Чтобы определить текущий домен, используешь request()->getHttpHost()
Да ок понял, спасибо.
Есть магазинчик на Laravel, ну и пример сработки
domen-1.com/idgood=1
ну и тут выводиться товар какой то. Все отлично, но... мне нужно сделать чтоб я могу подключить к данному движку другие домены.
domen-2.com/idgood=1
domen-3.com/idgood=1
domen-4.com/idgood=1
Чтоб можно было тот же товар выводить но под другим доменом.
Вариант решения:
Просто прописываем A зону домену domen-2.com на тот же IP где сидит domen-1.com и все. Но нужно мне учитывать что заказ произошел с домена domen-2.com и domen-3.com и тд. С каждого домена. Подскажите как сделать лучше мне!
Также есть потребность и в сессиях и в куках соотвественно, естественно каждый домен имеет свои куки и они не пересекаются между собой ни какой тут "across multiple domains" ну должно быть. Просто типа другой магазин, база только общая по сути MYSQL - товары и заказы.