Laravel по-русски

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

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

#1 Laravel 5.x » Права доступа для опредленных записей в базе » 02.10.2018 21:40:53

Normand
Ответов: 1

Магазин на базе Laravel 5.4.
Есть заказы на две страны: 1 и 2.
Мне нужно чтоб менеджер из 1 страны видел только заказы для страны 1, соответственно 2 менеджер видел только заказы с страны 2.
Понятно что в базе можно сделать поле, с отношением ... еще можно сделать связующую таблицу.
А что если завтра появиться третья страна и мне надо будет менеджеру 1 предоставить доступ к записям страны 3, и новому менеджеру 3 предоставить доступ к стране 3.
Как можно гибко это реализовать? И самое главное понять!!! smile

я так понимаю что мы имеем юзеров
1 2 3 … X
и имеем группы, фактически юзеры не имеют доступов ни к чему, имеют только группы.
Те создаем таблицу groups, и при создании в ней записи группы скажем
1 - managaers Russia
2 - managers Ukraine
Создаем таблицу связывающую таблицу users и groups, называем ее connection
где будут перечисляться ID юзеров и соответственно ID группы в которую он имеет отношение. И так может 1 юзер у нас иметь отношение сразу в несколько групп.

Также для заказов будет еще своя таблица связывающая connection_perm
в которой мы указываем ID страны, и ID группы может работа с этой страной. И так мы можем к каждой стране атачить несколько групп.

Вот я примерно так вижу, может сильно запутанно?

-----------

еще как вариант сделать ответственного за конкретный заказ, согласно каким то критериям, например. Зашел заказ… мы создаем правило:
если заказ содержит russia то мы направляем рандомному то из отдела managers russia, ну или показываем всем пока кто то не кликнул на кнопку взял заказ например он исчезает из входящего пула и становиться доступен только ответственному человеку. Вообще такая система реализована в битриксе, как бы логически продумать ее у себя, там очень гибко можно правила настраивать. Есть по сути только менеджеры и доступ к сущностям как бы стандартная система уровня доступов.


Есть проще вариант?


Спасибо за помощь!

#2 Re: Laravel 5.x » Куда складывать свои класс, и как их регистрировать. » 27.09.2018 22:24:40

Ок, спасибо посмотрел тонну уроков на ютуюбе.
Поправьте если я верно понял как мне нужно сделать.
Нужно создать три сервиса для каждого из курьеров которые будут доставлять товар.

Связать их одним сервис провайдером:

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 данный сервис провайдер не включался при каждом его выхове, так как он мне нужен только при запуске консольной одной команды.

Спасибо за ответы!

#3 Laravel 5.x » Куда складывать свои класс, и как их регистрировать. » 27.09.2018 15:17:34

Normand
Ответов: 5

Привет всем. Есть небольшой магазинчик на ларавель, доставку осуществляют несколько курьеров, планирую в консоле сделать команду которая будет при запуске по крону отправлять какому то курьеру, по логике скрипта, через API.
Проблема:
Под каждого курьера надо написать свой класс сопряжения с их API. Куда лучше и грамотнее выносить такие классы. В данном случае должно быть их три. Это в папку vendor или как лучше сделать, именно архитектурно. И как потом это внедрить именно в ларавель, где то надо же их зарегистрировать чтоб использовать.
Можно какие то примеры пожалуйста? Ну или ссылку на оные.
Спасибо за ответы!

#4 Re: Laravel 5.x » Не могу создать запрос к базе данных » 01.06.2018 07:05:19

Здравствуйте! спасибо за то что помогаете.
Но к сожалению данный код выдает ошибку

[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

#5 Laravel 5.x » Не могу создать запрос к базе данных » 31.05.2018 17:00:48

Normand
Ответов: 3

Есть две таблцы
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();


но он говорит что ошибка. Помогите составить нормально запрос пожалуйста.
Спасибо что потратили свое время!

#6 Re: Laravel 5.x » Помогите написать код более красиво ну или правильнее » 16.05.2018 12:57:40

я таки думаю, что все таки должен какой то быть инструмент нормальный, нельзя описывать каждую опцию в контролере и в посреднике и тд. Оно должно ка кто целостно идти одним блоком, это просто чувство такое smile, ну какой то отдельный класс который умеет работать с фильтрами

#8 Laravel 5.x » Помогите написать код более красиво ну или правильнее » 16.05.2018 01:02:46

Normand
Ответов: 3

Есть админка в ней есть вывод товаров, листинг с пагинацией, продукт имеет два варианта: активный и не активный.
В листинге есть настройки вывода:
1. Показать активные
2. Показать не активные
3. Кол-во товаров на страницу (пагинация)
http://take.ms/xSHdo - скришот настроеек у админа
-------------------------
Я конечно написал smile
Сначала у меня срабатывает посредник, который ловит куки админа, типа если есть в куках
отметены:
https://paste.laravel.io/433efded-4cdc- … 284a512d65
После я уже разбираю все через конфиг:
https://paste.laravel.io/ff9a90ba-4d6c- … 18176bc51f

Ну и на отображение.
Но мне кажется можно сделать это как то по другому в плане умнее что ли или логичнее.
Покритикуйте пожалуйста, только конструктивно с предложением.
Сразу скажу ответ на вопрос, зачем $options_admin['options_admin']['good_list'] - затем что посредник будет использовать еще и для других листингов в админке.

Спасибо за ранее, что потратили время!

#9 Laravel 5.x » Возвращает пустой $request » 10.04.2018 20:10:39

Normand
Ответов: 1
<?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.

#10 Re: Laravel 5.x » Обновить request все поля автоматически без merge ... » 18.03.2018 02:13:32

можно без кеев просто отдаешь строку и он там сам разбирает /1,2/green/...
просто я не знаю сколько там будет переменных, они динамические у меня, не ну

#11 Laravel 5.x » Обновить request все поля автоматически без merge ... » 17.03.2018 19:49:17

Normand
Ответов: 2

Привет всем!
Каким образом в реквест можно засунуть новую строку GET чтоб он автоматически все заменил там поля.
Ну например входящий урл /c2RzZmFzZmFmc2Zkcw я его декодирую в роутере прям и в реквест как то скормить надо без ридеректа урл декодированный чтоб он заменил там все поля на декодированые.
На входе c2RzZmFzZmFmc2Zkcw, потом декодирую его, а в реквест надо засунуть /1,2/green/... - это декодированный уже.
Ну есть же у реквеста какая то входящая переменная которая принимает строку всю GET и потом разбирает ее заполняя свои поля, просто подменив входные данные так сказать в уже созданном объекте класса.

#14 Re: Laravel 5.x » Помогите разобраться с базой, нужно создать внешние ключи » 20.02.2018 18:45:50

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

#15 Re: Laravel 5.x » Помогите разобраться с базой, нужно создать внешние ключи » 20.02.2018 18:42:45

добавил в дамп руками

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

#16 Re: Laravel 5.x » Помогите разобраться с базой, нужно создать внешние ключи » 20.02.2018 18:33:45

а можете дамп дать? спасибо что сделали тест ...
я в логи 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.

#18 Laravel 5.x » Помогите разобраться с базой, нужно создать внешние ключи » 20.02.2018 18:12:52

Normand
Ответов: 12

Прошу прощения но без дампа тут ни как не обойтись, но я уже неделю просто мучаюсь и не как не могу решить данную проблему, если кто то поможет я буду очень благодарен. За ранее спасибо.
https://drive.google.com/file/d/1jAsfA7 … sp=sharing
Это дамп структуры базы.
localhost__localhost__devshop__descriptions__phpMyAdmin_4.7.3_2018-02-20_15-46-52.png
пытаюсь создать внешний ключ на таблицу domains
ну и получаю вот  такую ошибку:
localhost__localhost__devshop__descriptions__phpMyAdmin_4.7.3_2018-02-20_15-47-28.png
Может кто попробует у себя воспроизвести, но у меня не получается ни как блин этого сделать. Я уже все перепробовал.

#19 Laravel 5.x » Как использовать своего вендора только в узких целях » 13.02.2018 01:43:58

Normand
Ответов: 1

Привет всем!
И так есть консольная команда, которая по крону будет запускаться и по API курьеров скидывать им заказы с магаза.
app\Console\Commands — тут я создал файлик типа исполняемый send.php
vendor\APISend\ — а тут положил либу, ну класс там всего один, дали курьеры
Хотел вендора этого зацепить через json а потом подума6 нафига мне он будет загружаться когда будет стартовать все приложение. Скажите как мне инкулдить его (vendor\APISend\) по грамотному именно только для этого send.php?

Может так:
use vendor\APISend;
А дальше как обратиться к классу? который в APISend

#20 Re: Laravel 5.x » Сортировка массива в коллекции » 17.01.2018 19:33:08

спасибо за наводку сделал так

PHP
$good->images $good->images->sortBy( function () use ($get_images){
                return 
array_search('id'$get_images);
            });

Все работает, но сложно конечно было понять смысл функции замыкания особенно use ($get_images). В оф документации конечно толком мало про то написано в примерах.

#21 Laravel 5.x » Сортировка массива в коллекции » 17.01.2018 01:39:25

Normand
Ответов: 2

Вроде задача логическая но думаю как сделать красивее. И так:
Есть коллекция изображений:
rd9sx
Каждое изображение имеет свой ID ну из базы конечно же, и имеется входящий массив данных для сортировки типа
[23,20]

Теперь надо сортировать коллекции массив чтоб на первом месте там в коллекции был сначала картинка под ID 23 а след. 20.
Можно сделать коллекцию новую и выдергивать по мере прохождения массива [23,20] туда картинки, ну и потом что останется докинуть уже без сортировки.
Вариант два, сделать сразу в модели какой то хитрый запрос в базу smile, но я не знаю как...
Может есть более изящные решения?
Нужно для реализации след функционала:
юзер дает в урле get запрос типа, images=23,20 я его ловлю, и говорю движку что выводить картинки надо именно в этом порядке, сначала картинку под id 23 потом под 20, ну слайдер. Так гибко получается очень, человек может меняя урл задавать разные параметры сортировки изображений в разных ситуациях.

#23 Re: Laravel 5.x » Laravel заставить работать сразу на нескольких доменов » 02.01.2018 16:31:41

ну вот сейчас у меня параллельно работает моего собственного написания магаз без laravel, и как раз там система с одной базой, но на каждом домене своя копия скриптов. Минусов тьма, например в системе обновления, 14 доменов обновить поверьте мне и правильно обновить это не реальная задача, да и это не единственное что самое плохое. Я думаю ду лучше ловить хост и в env насильно просто переназначать хост. По идеи должно сработать. А от туда вытаскивать собственно уже и писать в базу что такой то домен принес заказ, сделать доп таблицу просто доменами и их ID раскидывать в заказы. Вобщем такой вот план.

#24 Re: Laravel 5.x » Laravel заставить работать сразу на нескольких доменов » 30.12.2017 17:08:46

Не усложняйте себе жизнь. Если у вас только общая бд, клонируйте ваш ларавел проект по доменам и используйте общую базу. Я бы использовал deployer для автоматизации деплоя проекта

так я не усложняю это требования разработки. Склад один а баз будет 33? Это как раз и будет вызывать глобальные трудности.

Делаешь одно приложение и все домены направляешь на него. Чтобы определить текущий домен, используешь request()->getHttpHost()

Да ок понял, спасибо.

#25 Laravel 5.x » Laravel заставить работать сразу на нескольких доменов » 30.12.2017 01:29:19

Normand
Ответов: 10

Есть магазинчик на 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 - товары и заказы.

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