Laravel по-русски

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

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

#1 Re: Laravel 5.x » Laravel Валидация Формы: проверить, если такой пользователь в базе » 04.07.2017 10:19:06

Androbim, пробовал, конечно:)
Его не достаточно для решения этой задачи.

#2 Laravel 5.x » Laravel Валидация Формы: проверить, если такой пользователь в базе » 03.07.2017 21:57:48

Serge83
Ответов: 4

Здравствуйте!

Laravel 5.4.

Есть вот такая форма:

<form>
  <label> USER 1</label>
  <input type="text" name="fullname[0]">
  <input type="text" name="document_num[0]">
  
  <label> USER 2</label>
  <input type="text" name="fullname[1]">
  <input type="text" name="document_num[1]">

  <label> USER 3</label>
  <input type="text" name="fullname[2]">
  <input type="text" name="document_num[2]">

   .....
  <label> USER N</label>
  <input type="text" name="fullname[n]">
  <input type="text" name="document_num[n]">

  <input type="submit">
</form>

Кол-во добавляемых в форму юзеров неограничено.

Есть таблица 'users':

  id | fullname | document_num
  1  | John     | 111
  2  | Jane     | 112
 ..  | ...      | ...

Нужно при отправке проверять для каждого User'a (через Form Validation или Validator):

(1) Существует ли уже номер документа юзера $request->document_num[n] в таблице 'users' в поле 'document_num'.
(2) Если да, то проверить совпадает ли имя этого юзера из формы $request->fullname[n] с значением поля fullname из строки, где найдено совпадение номера документа (1)

Или по-русски - проверить, если юзер с таким номером паспорта уже есть в БД, совпадает ли введенное для него в форму имя с тем, что уже есть БД.

Соотвественно, если такого номера документа в таблице нет (Новый Юзер) или  все совпадает (Старый юзер без изменений) - возвращаем true, если номер документа уже есть, а Имя не совпадает - возвращаем False.

Буду признателен всем, кто попытается помочь:)

#3 Re: Laravel 5.x » Laravel Relationship: Таблица из id двух других » 23.06.2017 14:11:49

Sergant210 пишет:

Ну если вы в одном поле нашли повторяющуюся информацию и считаете, что вместо него лучше создать таблицу buyers с 3 полями, которая практически полностью копирует таблицу tour_tourist, то мы с вами любим разные математики и я уж точно вам не помощник. smile

smile ну вы смотрите шире на вещи) У вас допустим в один тур поедет 1001 турист:). и только один из них - плательщик. Значит вам нужно создать в поле 'tourist_type' 1000 нулей (для туристов неплательщиков).
Вместо этого я создам одну строчку:
tour_id | tourist_id | is_tourist
   1      |    1001     |    1

в ней всего 1 1001 1 = 6 знаков, вместо 1000 знаков у вас)

Можете поставить вместо туристов гены и ДНК, там счет пойдет на миллиарды уже нуликов.

Математики мы, возможно, действительно разные:)

#4 Re: Laravel 5.x » Laravel Relationship: Таблица из id двух других » 23.06.2017 12:51:31

Sergant210 пишет:

Тогда можно добавить только одно поле - tourist_type:
0 - турист (значит едет)
1 - покупатель (тоже едет)
2 - спонсор (купил, но не едет)

да, но тогда будет много лишних нулей:) Я люблю математику, там повторяющуюся инфу выносят за скобки. 2aх+3bх лучше написать как x(2a+3b). Ну вот тут вынесение инфы о покупателя в отдельную таблицу - это как раз вынесение х за скобки, чтобы не было избыточной информации.
Как так сделать - вопрос:)

#5 Вакансии » Ищу наставника (плачу) по Laravel » 23.06.2017 12:39:39

Serge83
Ответов: 0

Здравствуйте!
Я ищу наставника по Laravel. В основном я все пытаюсь решить сам (хорошо владею английским, что увеличивает в разы возможности для обучения), но иногда попадаются вопросы, над решением которых бьешься сутки, а потом оказывается, что там просто какую-то ерунду нужно добавиь в код (понимаете, наверное). Это, естественно бесит:)
Поэтому я ищу очень опытного человека по Laravel, к которому буду обращаться лишь изредка (скайп или любой другой мессенджер).
Я могу платить 500 р за консультацию (это просто ответ на вопрос, как организовать код, разговоров долгих в скайпе не нужно) для опытного человека мои вопросы будут детским садом.

Вот один из них: https://laravel.ru/forum/viewtopic.php?pid=12850#p12850

О себе: у меня есть свой успешный бизнес, но сейчас меня заинтересовало программирование:) Учиться решил по принципу 'learn-by-doing' и в данный момент делаю "туристическую" CRM для бизнеса друга.

Если Вам интересно - пишите на скайп sergeyfominvl  или просто тут в теме:)

#6 Re: Laravel 5.x » Laravel Relationship: Таблица из id двух других » 23.06.2017 12:37:23

Sergant210 пишет:

Можно в той же контировочной (pivot) таблице tour_tourist и добавить нужные поля (для лучшей семантики лучше добавить 2 поля - is_tourist и is_buyer, потому как если buyer едет (=1), то его невозможно отличить от других туристов).
В итоге получается всего 3 таблицы - туры, туристы и расширенная pivot таблица.

соглсасен, это был мой первый вариант) но там много лишних единиц у is_tourist и много лишних нулей у buyer. Т.е. конечно, у меня не будет гигабайтов данных, но мне просто всегда не нравилась избыточность информации. Поэтому решил написать такой вопрос, думаю, это сложнее сделать, но в итоге будет "красивее":) Это, так сказать, Challenge для прокачки программерских скиллов для меня:)

#7 Laravel 5.x » Laravel Relationship: Таблица из id двух других » 23.06.2017 11:42:38

Serge83
Ответов: 9

Здравствуйте!
В ДБ есть таблицы : 'tours' и 'tourists'

У 'tour' может быть МНОГО 'tourist'-ов, и 'tourist' может принимать участие в МНОГИХ 'tour'-ах. Я успешно связал их через  'belongsToMany" r (при добавлении строк в  "tours' и 'tourists" создается строка и  intermediate таблице 'tour_tourist' .

Структура "tour_tourist":

tour_id | tourist_id
         1 | 37
         1 | 38
         1 | 39
(туристы с  id = 37, 38 и 39 приписаны к туру с  id = 1, но могут в будущем быть приписаны и к другим турам)

ПРОБЛЕМА: Один из  'tourists' (37/ 38 / 39 из примера выше) может быть 'buyer'  (покупателем) тура . Отношения тура и покупателя  1-1. К тому же этот "покупатель" может ехать в тур с остальным, а может не ехать. Все данные передаются при отправке одной веб-формы.

Я хочу создать еще таблицу, с именем 'buyers':

tour_id | tourist_id | is_tourist
     1    |        39     |     0

(1. одному 'tour_id' может соответствовать только 1  'tourist_id')
(2. 'tourist_id' должен быть из принадлежащих соотвествующему 'tour_id' в предыдущей таблице "tour_tourist"  - в моем примере турист 39 принадлежит туру 1).
(3. 'is_tourist' это булево 1/0,  едет/только платит - в моем примере  0 - только платит).

Мне интересно, как я могу создать 'buyer'-а через отношения (relationship) в Laravel'е (one-to-one? hasManyThrough?) .

Спасибо заранее!

#8 Re: Laravel 5.x » Form Request валидация: при редиректе исчезают динамические поля » 09.06.2017 15:00:14

SlowDream пишет:

Почему бы не сделать отправку данных через ajax, а уже если пришла ошибка то отображать ее напротив нужного инпута.
Либо отлавливать инпуты из запроса и в шаблоне их уже отрисовывать заново, но мне такой вариант не нравится.

Спасибо, видимо буду делать через ajax)

#9 Laravel 5.x » Form Request валидация: при редиректе исчезают динамические поля » 07.06.2017 22:31:57

Serge83
Ответов: 2

DISCLAIMER: я новичек!) не обижайте!:)

Итак, у меня форма, + возможность добавления в нее новых полей через кнопку "Добавить" и настроенная через Form Request валидация.

При добавлении в форму пользователем дополнительного поля (в начальной версии поле DOC number 1, тут пользователь нажал на "+Add doc nubmer"-кнопку) и отправки двух уже существующих в ДБ значений:

A BBcode
http://joxi.ru/4Ak3z67IyGeLMA

После нажатия на Submit происходит валидация, редирект обратно на страницу форму, показывается ошибка "Doc nubmer is already in DB", но выводится, естественно, только 1 поле "Doc number" - как в форме стоит по умолчанию:

B BBcode
http://joxi.ru/KAgKYVxu4Jk0eA

Вопрос: как сделать, чтобы и второе (добавленное пользователем) поле сохранялось при валидационном редиректе?

Выдержки из кода:
ФОРМА:

<form>
  <div class='inputs'>    
    <label>Doc number: </label>
    <input type="text" name="doc_fullnumber[1]" value="{{old('doc_fullnumber.1')}}">
  </div>
  @if ($errors->has('doc_fullnumber'))

     <p class="inline">
	{{ $errors->first('doc_fullnumber') }}
    </p>
  @endif<br><br>	
  <button id='add_item'>Add doc number</button>
  <input type="submit" value="Submit">
</form>

Добавление поля через jquery:

$(document).ready(function(){
    $('#add_item').on('click', function (event) {
        event.preventDefault();
        var i = 2;
        $new_docnumber = $(         
            '<br><br>'+
            '<label>Номер док-та: </label>'+ 
            '<input type="text" name="doc_fullnumber['+i+']" placeholder="Номер док-та" value="{{old('doc_fullnumber.[i]')}}">');
        $('.inputs').append($new_passenger);
    })
})

Выдержки из файла app/http/Requests/tours2_create_tableRequest.php (валидация работает отлично):

public function rules()
{
    return [

        'doc_fullnumber' => 'unique:tourists'

    ];
}

public function messages()
{
    return ['doc_fullnumber.unique' => 'Doc number is already in DB!'];
}

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