Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Androbim, пробовал, конечно:)
Его не достаточно для решения этой задачи.
Здравствуйте!
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.
Буду признателен всем, кто попытается помочь:)
Ну если вы в одном поле нашли повторяющуюся информацию и считаете, что вместо него лучше создать таблицу buyers с 3 полями, которая практически полностью копирует таблицу tour_tourist, то мы с вами любим разные математики и я уж точно вам не помощник.
ну вы смотрите шире на вещи) У вас допустим в один тур поедет 1001 турист:). и только один из них - плательщик. Значит вам нужно создать в поле 'tourist_type' 1000 нулей (для туристов неплательщиков).
Вместо этого я создам одну строчку:
tour_id | tourist_id | is_tourist
1 | 1001 | 1
в ней всего 1 1001 1 = 6 знаков, вместо 1000 знаков у вас)
Можете поставить вместо туристов гены и ДНК, там счет пойдет на миллиарды уже нуликов.
Математики мы, возможно, действительно разные:)
Тогда можно добавить только одно поле - tourist_type:
0 - турист (значит едет)
1 - покупатель (тоже едет)
2 - спонсор (купил, но не едет)
да, но тогда будет много лишних нулей:) Я люблю математику, там повторяющуюся инфу выносят за скобки. 2aх+3bх лучше написать как x(2a+3b). Ну вот тут вынесение инфы о покупателя в отдельную таблицу - это как раз вынесение х за скобки, чтобы не было избыточной информации.
Как так сделать - вопрос:)
Здравствуйте!
Я ищу наставника по Laravel. В основном я все пытаюсь решить сам (хорошо владею английским, что увеличивает в разы возможности для обучения), но иногда попадаются вопросы, над решением которых бьешься сутки, а потом оказывается, что там просто какую-то ерунду нужно добавиь в код (понимаете, наверное). Это, естественно бесит:)
Поэтому я ищу очень опытного человека по Laravel, к которому буду обращаться лишь изредка (скайп или любой другой мессенджер).
Я могу платить 500 р за консультацию (это просто ответ на вопрос, как организовать код, разговоров долгих в скайпе не нужно) для опытного человека мои вопросы будут детским садом.
Вот один из них: https://laravel.ru/forum/viewtopic.php?pid=12850#p12850
О себе: у меня есть свой успешный бизнес, но сейчас меня заинтересовало программирование:) Учиться решил по принципу 'learn-by-doing' и в данный момент делаю "туристическую" CRM для бизнеса друга.
Если Вам интересно - пишите на скайп sergeyfominvl или просто тут в теме:)
Можно в той же контировочной (pivot) таблице tour_tourist и добавить нужные поля (для лучшей семантики лучше добавить 2 поля - is_tourist и is_buyer, потому как если buyer едет (=1), то его невозможно отличить от других туристов).
В итоге получается всего 3 таблицы - туры, туристы и расширенная pivot таблица.
соглсасен, это был мой первый вариант) но там много лишних единиц у is_tourist и много лишних нулей у buyer. Т.е. конечно, у меня не будет гигабайтов данных, но мне просто всегда не нравилась избыточность информации. Поэтому решил написать такой вопрос, думаю, это сложнее сделать, но в итоге будет "красивее":) Это, так сказать, Challenge для прокачки программерских скиллов для меня:)
Здравствуйте!
В ДБ есть таблицы : '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?) .
Спасибо заранее!
Почему бы не сделать отправку данных через ajax, а уже если пришла ошибка то отображать ее напротив нужного инпута.
Либо отлавливать инпуты из запроса и в шаблоне их уже отрисовывать заново, но мне такой вариант не нравится.
Спасибо, видимо буду делать через ajax)
DISCLAIMER: я новичек!) не обижайте!:)
Итак, у меня форма, + возможность добавления в нее новых полей через кнопку "Добавить" и настроенная через Form Request валидация.
При добавлении в форму пользователем дополнительного поля (в начальной версии поле DOC number 1, тут пользователь нажал на "+Add doc nubmer"-кнопку) и отправки двух уже существующих в ДБ значений:
После нажатия на Submit происходит валидация, редирект обратно на страницу форму, показывается ошибка "Doc nubmer is already in DB", но выводится, естественно, только 1 поле "Doc number" - как в форме стоит по умолчанию:
Вопрос: как сделать, чтобы и второе (добавленное пользователем) поле сохранялось при валидационном редиректе?
Выдержки из кода:
ФОРМА:
<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!'];
}
Страницы 1