Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Есть таблица exchange_rates (id,bank_id,city_id)
Есть таблица banks (id,city_id,name)
Есть таблица filials (id,parent_id,city_id)
Вот модель ExchangeRate
public function banks(){
return $this->belongsTo('App\Bank','bank_id', 'id');
}
Я пытаюсь выбрать курсы валют с банками и с филиалами в определенном городе
$exchange_rates=ExchangeRate::with('banks')->where('city_id',$data['city_id'])
->where('type',$data['nal_beznal'])->get();
Как в этот запрос включить не только банки (with) но и отделения в которых parent_id=banks.bank_id и city_id=$data['city_id']
почему дамп модели есть а метод save() не срабатывает
Вот код
$exchangeRate=$this->setUpEntity($rates, $bank, null , new \DateTime(), 'cash');// city
dump($exchangeRate);
if($exchangeRate->save()){
dd('saved');
}
else{
dd('not_saved');
}
А вот дамп этой модели
http://prntscr.com/i9593u
В базе не появляется ничего и даже в else я не попадаю
дальше у меня exception отработал но я не понимаю почему ни один dd не отработал
В качестве маркера возьмем ACL - систему управления правами доступа.
Могли бы вы смоделировать или на конкретных примерах из опыта или специально сделанных показать подходы реализации ACL на Laravel для крупного Enterprise приложения.
Не просто разграничение прав чтение/запись для определенных сущностей (которая есть "в коробке") с привязкой к группе пользователей, а создание и настройка более гибкой системы - с возможностью указания получателя прав(группа пользователей, индивидуальный пользователь), создания ролей для группировки нескольких прав, возможно работа с динамическими правами (права, которые зависят от ряда внешних факторов, например, от дня недели, времени).
С поддержкой делегирования прав между получателями прав. Также необходима поддержка модульности, чтобы вся система была унифицирована и при разработке нового модуля и включения его в общую систему, все права на сущности и операции этого модуля также подхватывались бы ядром системы.
Таким образом минимальный уровень, который нам сейчас нужен - это организация системы прав на уровне:
- определение прав для работы с сущностью (чтение, изменение и т.д) - они могут быть самыми разными, взависимости от функциональности той или иной сущности(или даже модуля)
- группировка прав в роли (Редактор, Корректор, Читатель и т.д)
- возможность привязки как отдельных прав так и ролей к получателям прав - пользователям, группам пользователей, ботам.
- возможность предоставлять права одних получателям - другим.
Например, пользователь с ролью "Директор", который также принадлежит к группе пользователей "Менеджмент" для которых выставлены свои права и кроме того имеет уникальное право на просмотр отчетов по движению средств, ушел в отпуск, поэтому все его права должны делегироваться пользователю Максиму Николаевичу, без необходимости вручную искать и выставлять все эти права.
Система прав доступа на примере:
https://helpdesk.bitrix24.ru/open/6268091/
Система прав доступа на примере:
https://www.zoho.eu/crm/help/security/
Весьма Благодарен за ответы.Натолкните пожалуйста на мысли может быть подскажите какой шаблон проектирования удачно применить к этой системе, распишите пожалуйста как можно подробнее.Если возможно с вашей стороны.:) Какие темы нужно знать чтобы осуществить подобное?
Действительно работает, поясни пожалуйста что это значит чего ему не хватало?
простой видит
http://prntscr.com/i0gdui
Не работает
http://prntscr.com/i0ge6h
http://prntscr.com/i0gejv
Route::get('/seeds/index', 'MakeSeedingController@index')->name('seeds');
А вот так без проблем перенаправляет
Спасиво выстроил через pivot Многие ко многим но немного поменял структуру таблиц естественно Спасибо
Здравствуйте Заранее спасибо за ответ
Необходимо перейти на экшн контроллера который и будет указан вторым параметром в маршруте
Так не получилось Хотя переменную $var вижу
Route::get('/seeds/{var}', function($var){
dump($var);
return redirect()->action('MakeSeedingController@index');
});
Получаю ошибку
http://prntscr.com/i0ebrf
Хотя и контроллер и экшн существуют
Да и простите за повтор темы случайно получилось не вижу как удалить
Ты мог бы подсказать конкретно какие в этом случае отношения выбрать
Спасибо большое !:)
У меня есть таблица Properties
http://prntscr.com/hzwcht
И так же отношения фиксируются в таблице Property_category
http://prntscr.com/hzwcu8
Мне надо зная id одной категории ( 64 ) получить вот эту запись http://prntscr.com/hzwdk1
Как это сделать профессиональнее всего?
Спасибо огромное за ответы
fopen(/seeds_files/cities.txt): failed to open stream: No such file or directory
Я переношу сайт с одного фреймворка на другой
Есть два файла в одном я забираю из второй базы таблицу и серриализую массив
public function cities(){
//get all data from cities table
$someModel = new City();
$someModel->setConnection('mysql2');
/*$data['cities']=DB::connection('mysql2')->table('cities')->get();*/
$data['cities']=$someModel->get();
$myarray=$data['cities']->toArray();
dd($_SERVER['DOCUMENT_ROOT']);
$file_pointer = $_SERVER['DOCUMENT_ROOT']."/seeds_files/cities.txt";
if (!$file_handle = fopen($file_pointer, 'wb')) exit;
flock($file_handle, LOCK_EX);
if (fwrite($file_handle, serialize($myarray)) === false) exit;
flock($file_handle, LOCK_UN);
fclose($file_handle);
echo '<h2>Serialize success!</h2>';
if ( !$file_handle = fopen($file_pointer, 'rb') ) exit;
$myarrayecho = unserialize( fread($file_handle, filesize($file_pointer)) );
fclose($file_handle);
echo '<h2>Serialize back:</h2>';
echo '<pre>';
var_dump($myarrayecho);
//print_r($myarrayecho);
//var_export($myarrayecho);
echo '</pre>';
}
Здесь отлично открывается файл на запись $file_pointer = $_SERVER['DOCUMENT_ROOT']."/seeds_files/cities.txt";
А во втором файле в Сиддировании CitiesSeederTable
Я пытаюсь открыть этот файл на чтение и засидировать инфу из файла
class CitiesTableSeeder extends Seeder
{
public function run()
{
$file_pointer = $_SERVER['DOCUMENT_ROOT']."/seeds_files/cities.txt";
if ( !$file_handle = fopen($file_pointer, 'rb') ) exit;
$dataSet = unserialize( fread($file_handle, filesize($file_pointer)) );
fclose($file_handle);
DB::table('cities')->insert($dataSet);
}
}
И получаю ошибку fopen(/seeds_files/cities.txt): failed to open stream: No such file or directory
когда пытаюсь выполнить команду php artisan db:seed --class=CitiesTableSeeder
Помогите пожалуйста понять
Спасибо тебе огромное
bitbucket я клонировал его какое имеет отношение репозиторий к миграциям?
Что ты имеешь ввиду репо открыт? http://prntscr.com/hzkp80
А кодировка не влияет вот в месадже чтото пишут про кодировку
http://prntscr.com/hzkmlr
Туплю Schema::dropIfExists('credit_prop_fees'); Удаляет из тинкера только почемуто в тинкере null как ответ, но таблица удаляется
Они у меня идут одна за другой через несколько, я запустил php artisan migrate у меня вылезла ошибка таблица не удалилась и я запустил тинкер получил null
Она и в потоке не хочет срабатывать dropIfExist() когда я запускаю просто даже php artisan migrate. Я ж говорю даже тинкером не убирает таблицу
Привет вторая не прямо за первой идет может чуть позже php artisan migrate:refresh composer dump-autoload запускал конечно
In Connection.php line 664:
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'credit_prop_fees' already exists (SQL: create table `credit_prop_fees` (`id` int unsigned not null auto_increment primary key, `fee_id` int not null, `created_at` timestamp null, `updated_at`
timestamp null) default character set utf8mb4 collate utf8mb4_unicode_ci)
Есть 2 миграции
Первая
public function up()
{
Schema::create('credit_prop_fees', function (Blueprint $table) {
$table->increments('id');
$table->integer('fee_id');
$table->timestamps();
});
}
И во второй как видите есть удаление предыдущей таблицы
public function up()
{
Schema::dropIfExists('credit_prop_fees');
Schema::create('credit_prop_fees', function (Blueprint $table) {
$table->increments('id');
$table->integer('credit_id');
$table->integer('credit_prop_id');
$table->integer('fee_type_id');
$table->integer('fee_value_id');
$table->timestamps();
});
}
Что ему может тут не нравится Есть же Schema::dropIfExists('credit_prop_fees');
И даже вот это не срабатывает
C:\OSPanel\domains\laravel.bai.loc>php artisan tinker
Psy Shell v0.8.17 (PHP 7.1.12 — cli) by Justin Hileman
>>> Schema::drop('credit_prop_fees');
=> null
Спасибо огромное за ответы
Почему в дампе есть строка а в ретурне уже ее нет?
посмотри вот это пожалуйста http://prntscr.com/h9j5m3
а это в консоле http://prntscr.com/h9j5xd
Есть какието предположения у вас куда пропала строка?
Да и вот этот дамп я удалил http://prntscr.com/gv3omh а он открывается
Такое впечатление что Шторм файлы не записывает, Хотя одни записывает другие нет
Middleware как бы я не переписывал ни какой реакции
То есть нет остановки по dd попадаю на страницу /sms_login