Laravel по-русски

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

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

#51 Re: Веб-разработка » Развертывание "боевого" » 18.09.2017 13:46:47

Смотрел в сторону таких штуковин, как Deployer и Capistrano.

#52 Re: Веб-разработка » Развертывание "боевого" » 04.09.2017 08:06:56

Большое спасибо!
Информации для размышления достаточно. Как выработаю решение, опубликую.

#53 Re: Веб-разработка » Справочная система на сайте » 01.09.2017 09:04:08

Большое спасибо!
Вопрос был по существующим.
Считаю, ответ получен.

#54 Re: Веб-разработка » Развертывание "боевого" » 01.09.2017 09:02:38

Большое спасибо!
Пока что работаю один, но в одиночку я это хозяйство вряд-ли потяну, помощника думаю искать в ближайшее время, поэтому, наверное, тестовый сервер нужен наверное, сразу :-).
Мне виделось что-то вроде автодеплоя master-а на "бой"... Читал, что есть такие схемы.
Другой вопрос, в этом случае, придется каждый раз апдейтить composer...
Когда Вы говорили про накат с локального на боевой, Вы подразумевали накат vendor, или апдейт composer-а лучше выполнять на боевом?
Или версия целиком собирается на локальном и накатывается?
Миграции-то, я так понимаю, все равно запускать "на бою" придется?
Извините за такой "поток сознания", реально, опыта развертывания чего-то подобного не имею, в голове каша пока.
Хотелось бы, конечно, отладить более-менее оптимальную схему...

#55 Веб-разработка » Развертывание "боевого" » 30.08.2017 09:04:45

Androbim
Ответов: 11

Доброго времени суток!

Требуется развернуть ресурс в сети, с учетом дальнейшей доработки/поддержки, контроля версий и т. п.
Кто-нибудь может подсказать примерную структуру? Ну там, тестовый-боевой-локальный..?
Не хотелось бы наступать на грабли, а чтобы сразу более-менее оптимально, по-опыту.

С уважением.

#56 Веб-разработка » Справочная система на сайте » 27.07.2017 13:55:17

Androbim
Ответов: 2

Доброго времени суток, уважаемые!
Приходит время организовать на сайте справочную систему, да и вообще, можно сказать, нечто вроде базы знаний... Ну, иерархическую структуру страниц, с прекрестными ссылками, с которой потом, по-идее, могли бы работать много людей.
Как это лучше сделать?
wiki?
А технически?
Поддомен?
Я прошу извинить, но никогда не решал подобных вопросов, хотя бы направление определить.
С уважением.

#57 Re: Laravel 5.x » В запросе 3 уровня вложенности не находит поле » 24.07.2017 07:40:29

Думаю, из-за ошибки здесь, посмотрите внимательно

where table.table1_id = table1.id

Кстати, разместить тему не в том разделе, по-сути, примерно та же ошибка :-) Ваш вопрос не имеет отношения к Laravel, для подобного существует "Общий раздел" :-)

#58 Re: Laravel 5.x » Сортировка по связанной модели » 22.07.2017 10:15:59

It work! То, что надо.

$competitors = Competitor::join('ratings as rs', 'rs.competitor_id', '=', 'competitors.id')
                ->orderBy('rs.position', 'asc')
                ->select('competitors.*')
                ->with('users')
                ->with('photos')
                ->with('ratings')
                ->paginate(3);

Спасибо!

#60 Laravel 5.x » Сортировка по связанной модели » 21.07.2017 18:20:28

Androbim
Ответов: 3

Доброго времени суток, уважаемые!
А можно ли в запросе вида

$competitors = Competitor::with('users')
                ->with('photos')
                ->with('ratings')
                ->paginate(3);

выполнить общую сортировку по одному из полей ratings?

С уважением.

#61 Re: Общий раздел » Алгоритм определения места в рейтинге » 21.07.2017 16:34:35

А почему тогда не юзер3,юзер2,юзер4 ? :-)
Впрочем, это не суть, рейтинг, в данном случае, не итог состязания.

#62 Re: Общий раздел » Алгоритм определения места в рейтинге » 21.07.2017 16:01:09

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

Не думаю, что там когда-либо будет миллион строк, но дело не в этом, просто я про Redis не в курсе пока еще, впрочем, спасибо, обязательно посмотрю.

собственно сам момент:почему у юзер5 не 5-е место , а 3-е?

Потому что у предыдущих одинаковые оценки, тут в соответствии с постановкой, все верно. Логическая несостыковка? Хм... Как посмотреть, ведь у предыдущих - 2-е место.

#63 Re: Общий раздел » Алгоритм определения места в рейтинге » 21.07.2017 11:34:08

В итоге вышло вот что.

public function rating()
    {

        // Полная очистка рейтинга
        DB::table('rating_scores')->truncate();

        //Подготовка данных для выстраивания рейтинга
        $rows = DB::table('scores')
                    ->select(DB::raw('competitor_id, nomination_id, avg(score) as avscore'))
                     ->where('is_actual', '=', 1)
                     ->groupBy('competitor_id')
                     ->groupBy('nomination_id')
                     ->orderBy('avscore', 'desc')
                     ->get();

        //Вставка 
        foreach ($rows as $row) {
            DB::table('rating_scores')->insert(['competitor_id' => $row->competitor_id, 'nomination_id' => $row->nomination_id, 'avscore' 
                                                => $row->avscore]);
        }

        //Построение рейтинга

       //Получаем открытые номинации (чтобы не тратить ресурсы на закрытые)
         $nominations = Nomination::where('is_actual', 1)->get();
         
        // По каждой номинации считается рейтинг, используется алгоритм, предоставленный covobo
        foreach ($nominations as $nomination) {
            $ratings = RatingScore::where('nomination_id', $nomination->id)
             ->orderBy('avscore', 'desc')->get();
            $position = 0;
            $prev_score = 0;
            foreach ($ratings as $rating) {
                $rating_current = RatingScore::find($rating->id);
                if ($prev_score != $rating_current->avscore) {
                    $position = $position + 1;
                }
                $rating_current->position = $position;
                $prev_score = $rating_current->avscore;
                $rating_current->save();
            }
        }
    }

25acdd296fd8.png

#64 Re: Общий раздел » Алгоритм определения места в рейтинге » 19.07.2017 12:28:37

Ну так я весьма вами благодарен :-)

Вот так получаем позицию участника.

SET @position = 0;
SET @prev_avscore = 0;
SELECT a.* FROM (
  SELECT competitor_id, avscore, if(@prev_avscore != avscore, @position := @position + 1, @position) as position, @prev_avscore := avscore
  FROM rating_scores
  WHERE nomination_id = 1
  ORDER BY position) as a
WHERE a.competitor_id = 484;

#65 Re: Общий раздел » Алгоритм определения места в рейтинге » 19.07.2017 11:46:30

Однако, опыты продолжаются, и вот на чем остановился.

TRUNCATE TABLE rating_scores;
INSERT INTO rating_scores (competitor_id, nomination_id, avscore) 
SELECT competitor_id, nomination_id, avg(score) as avscore
FROM scores
WHERE is_actual = 1
GROUP BY competitor_id, nomination_id
ORDER BY avscore desc
SET @position = 0;
SET @prev_avscore = 0;
SELECT competitor_id, avscore, if(@prev_avscore != avscore, @position := @position + 1, @position) as position, @prev_avscore := avscore
FROM rating_scores
WHERE nomination_id = 1
ORDER BY position 

В результате участники с одинаковыми оценками имеют одинаковые позиции.

'484', '6.10', '1', '6.10'
'487', '6.10', '1', '6.10'
'485', '1.50', '2', '1.50'
'486', '1.40', '3', '1.40'

#66 Re: Общий раздел » Алгоритм определения места в рейтинге » 17.07.2017 18:19:37

Большое всем спасибо еще раз!

Решил при помощи GROUP_CONCAT, предварительно создав такую вьюху, для "уникальности" участников:

CREATE VIEW rating_scores AS SELECT
                          AVG(score) AS avscore, competitor_id, nomination_id
                          FROM scores
                          WHERE is_actual = 1
                          GROUP BY competitor_id, nomination_id'

А затем, к ней:

$ratingScores = DB::table('rating_scores')
     ->select(DB::raw('avscore, GROUP_CONCAT(competitor_id)'))
     ->where('nomination_id', $id) //параметр
     ->groupBy('avscore')
     ->orderBy('avscore', 'desc')
     ->get();
return  $ratingScores;

Результат (в первом элементе, как раз, одинаковые оценки):

Collection {#781 ▼
  #items: array:3 [▼
    0 => {#782 ▼
      +"avscore": 6.1
      +"GROUP_CONCAT(competitor_id)": "487,484"
    }
    1 => {#784 ▼
      +"avscore": 1.5
      +"GROUP_CONCAT(competitor_id)": "485"
    }
    2 => {#785 ▼
      +"avscore": 1.4
      +"GROUP_CONCAT(competitor_id)": "486"
    }
  ]
}

#68 Re: Laravel 5.x » Обработка ошибок базы данных » 14.07.2017 12:36:30

В общем случае как-то так:

public function вашаФункция(StoreCommentRequest $request)
{
    try {

        //ваш запрос к БД
           
    } catch (Exception $e) {
        // обработка исключения, в данном случае, как-раз, редирект
        redirect()->back()
            ->with('error', $e->getMessage());
    }
}

#69 Re: Laravel 5.x » Обработка ошибок базы данных » 14.07.2017 12:18:00

Конечно есть, это просто обработка соответствующего исключения. В нее можно вставить и редирект.

#70 Re: Общий раздел » Стоит ли избегать хранения содержимого мета-тэгов в БД? » 14.07.2017 12:14:19

Это, в любом случае, динамическое содержимое, поэтому хранение в БД очевидно.

#71 Re: Laravel 5.x » Пакет crud генератора. Какой лучше? » 13.07.2017 10:47:07

Немного поработал с Yii и его Gii(генератор представлений, моделей, контроллеров с эшенами для создания, удаления, редактир-я записей), очень понравилось, и хочу такое же в Laravel.

А зачем? Для генерации классов Artisan проще, ничего лишнего...

#72 Re: Общий раздел » Алгоритм определения места в рейтинге » 12.07.2017 15:43:09

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

#73 Re: Общий раздел » Алгоритм определения места в рейтинге » 12.07.2017 15:21:09

Большое всем спасибо! Направление примерно понятно, пока заверстаю, подумаю :-)

#74 Re: Общий раздел » Алгоритм определения места в рейтинге » 12.07.2017 14:58:21

Смещаем место только если изменился рейтинг.

В настоящее время рейтинг в структуре не хранится. Предполагалось вычислять его "по-ходу".
Впрочем, мне кажется, что даже если изменить структуру под Ваше решение... Не оптимально.

P.S. Сорри, подразобрался, прикину. Спасибо :-)

#75 Re: Общий раздел » Алгоритм определения места в рейтинге » 12.07.2017 14:32:56

Решение для MySQL

А если оценки одинаковые? Место-то, при этом одно...

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