Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Проще, но, увы, неправильно. Пользователь может что-то читать или смотреть на странице, и ещё, пока он на какой-либо странице сидит, другие пользователи могут отправлять ему сообщения и видеть, что он онлайн.
В случае, когда пользователь сам нажимает кнопку Выйти, легко отследить и принять, что теперь он оффлайн, а при следующем посещении сайта ему нужно будет залогиниться.
А вот если пользователь закрыл все вкладки с сайтом, то тут тоже нужно считать, что он оффлайн. А когда он снова открывает складку с сайтом, то ему не надо заново логиниться. Подскажите, как отслеживать такую ситуацию и как сделать, чтобы пользователю не нужно было снова логиниться в этом случае?
Используется laravel 5.7
Получилось всё настроить + планировщик винды. Но! Один момент остался - если задач несколько на одно и то же время - их же надо запустить разом и параллельно в несколько процессов, а пока что в команде, которая делает запрос на подошедшие по времени задачи, в цикле для каждой найденной задачи вызывается соответствующая функция. А как же их запускать параллельно в одно время?
Спасибо! Идея интересная, смущает только способ хранения и выбора задач -
Пусть эта команда делает запрос в таблице заданий
задачи могут часами висеть в ожидании, соответственно, их там накопится...уйма. Каждую минуту дёргать всю таблицу на сотни тысяч записей и проверять в них даты - хорошая ли практика?
таблица заданий (at datetime, command varchar(100), arguments text)
(и, кстати, ключ-то составной будет, id ещё нужен, т.к. at datetime может быть один и тот же у нескольких задач. Либо не составной, а первичный - id, а at datetime - просто индекс)
Здравствуйте!
Подскажите, каким образом можно реализовать серверные события по времени? Нужно выполнять много разных задач при наступлении определённых даты/времени (у каждой задачи прописаны эти дата/время).
Если более подробно, то:
1. Пользователи могут включать какие-то события, т.е. жмут кнопку, сервер производит какие-то действия, расчёты, обновляет данные в бд (postgresql) ставя в них дату/время начала и расчитанные дату/время окончания для этого события и этого юзера.
2. Уже есть заготовленные события, которые вызываются в определённое время, напр. каждый вторник в 15:15 всем юзерам выдать такое-то сообщение, или определённые данные в бд обновить или ещё что.
Нужно: отслеживать, подошли ли дата/время этих событий; когда подошли - вызвать соответствующий событию метод, обновить
данные в бд, если нужно - выдать уведомления одному или нескольким юзерам или запустить ещё какое-то событие, так же отслеживаемое.
Т.е., как я это вижу пока, каждую секунду (либо минуту, пока ещё не решено длительность задач будет кратна секунде или минуте) нужно проверять весь список имеющихся задач и сравнивать их дату/время с наступившим временем на сервере. Если совпало, то выполнить эту задачу.
Мне посоветовали очереди с redis, прочитала, но вроде они не позволяют выполнять задачи по времени, а просто выполняют задачи одну за другой. Или это не так? Что тогда подходит для решения данного случая?
P.S.: использую Laravel 5.4, postgresql 11.1, xampp - php 7.2.0, apache 2.4.29, windows 10.
Мм, интересный вариант. Спасибо, попробую!
(всё-таки это странно, что для построения самых простецких запросов с перечислением связанных таблиц в from не добавили простого метода from, и поэтому нужно всячески изгаляться)
Можете привести прямо нужные строчки из статьи, где это описано? Я вот не нашла, кроме join(), потому и спросила. DB:select() пока и использую, но это сырой запрос, и возвращает он не коллекцию, а массив, что очень начинает затруднять при дальнейшем использовании этих данных( В коллекции много полезных методов, а тут массив с какого-то..(
Здравствуйте!
Есть 2 таблицы:
users
id
id_depart
departments
id
type
Как в laravel 5.4 средствами eloquent создавать запросы такого типа (с несколькими таблицами в from без join)?
SELECT users.*
FROM users, deraptments
WHERE users.id_depart = departments.id
WHERE departments.type = 3
Хз, у меня заработало с изменением
$path = storage_path('public/' . $filename);
на
$path = storage_path('app\public\\' . $filename);
а урл такой
http://www.my.local/storage/images/1.jpg
В общем, кому нужно, чтобы правильно работали ссылки на storage/app/public можно использовать вот такой вариант, взятый отсюда:
Route::get('storage/{filename}', function ($filename)
{
$path = storage_path('app\public\\' . $filename);
if (!File::exists($path)) {
abort(404);
}
$file = File::get($path);
$type = File::mimeType($path);
$response = Response::make($file, 200);
$response->header("Content-Type", $type);
return $response;
});
Здравствуйте!
На ноуте стоит windows 7 х64, xampp - php 7.2.0, apache 2.4.29 (Win32).
После смены режима в xampp с cgi на php как модуль apache в laravel перестала работать символическая ссылка на storage/app/public. При открытии www.mysite.local/storage попадаю в папку public/storage вместо storage/app/public. Делаю artisan storage:link получаю - The "public/storage" directory already exists. Подскажите, в чём может быть дело? Как исправить?
Или есть альтернативные варианты получения ссылок на файлы из storage/app/public, без символической ссылки? Или просто перенести оттуда файлы в public/storage?
Содержимое config\filesystem.php:
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
P.S.: короче говоря, как прописывать теперь ссылки на файлы без символической ссылки?..