Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
У меня прайс на 500000 строк импортируется в базу, база занята минут 10.
При загрузке прайса модальная форма с выбором файла прячется и пользователь может делать что хочет.
Кроме него есть и другие пользователи.
Как правильно организовать работу, чтобы они не редактировали записи в таблице, когда в нее загружаются обновления.
То же самое и другие пользователи могут производить подобные действия.
Можно сделать глобальную переменную в которой отображать состояние базы, и при каждом обращении в базе его проверять ?
Или запись в отдельной таблице сделать и его проверять ?
Кстати сам подумал, что может не заходит запись,
И получил при
$NUMBER = $csvarr[0][0] ; // $NUMBER = 496354 есть значение из csv
vagprice::where('NUMBER', $NUMBER)->get() // НЕ находит $records = 0
vagprice::where('NUMBER','496354')->get() // Находит $records = 1
$NUMBER = (string) $NUMBER;
vagprice::where('NUMBER', $NUMBER)->get() // опять НЕ находит
Поле NUMBER в базе текстовое.
Тоже самое с методом Update, наверное.
Может я не так пише этот запрос
where('NUMBER', $NUMBER)
Сидел всю ночь над этим, могу и перепутать. Спасибо за участие.
Да есть же.
У меня две функции в контроллере, одна апдейтит одиночную запись, вторая списком из csv.
Первая функия апдейтит все записи включая первую, вторая функция списком, все кроме первой.
Убиться об стену.
Я уже не знаю.
Пробовал и foreach и for при $i=0 $i=1.
Вроде не в этом дело. Массив я дамплю и проверяю, первый элемент $csvarr в порядке, и подходит для записи в базу.
Все последующие строки нормально записываются.
Все строки абсолютно одинаковые, вот они в csv:
496354;865;455;0;15;9;zestankel;propilen
1093804;231;12;8;42;5;buwezlen;dectil
735161;9879;89;6;37;6;drezina;railway
7475450;9789;87;5;92;6;ceramin;pmixture
8615;5235;35;2;41;4;notice;error
4451925;4363;76;4;80;6;knowledge;moonlight
275;643643;23;9;70;8;raiser;Sunday
20124;64364;97;1;60;5;blaiser;mushroom
780;6443;23;1;54;5;Fafaru;mubaki
9818;745865;55;2;75;6;dorequ;nodoku
4977;967;78;7;74;7;pokrywka;nato
4;23532;33;3;23;8;tpmas;qwemdo
45696745;48565;55;5;49;9;weclomen;rytiol
Извините за простыню, но я уже вручную индекс, без цикла:
$NUMBER = $csvarr[2][0];
$NUMBER2 = $csvarr[2][1];
$WEIGHT = $csvarr[2][2];
$VPE = $csvarr[2][3];
$VIN = $csvarr[2][4];
$NL = $csvarr[2][5];
$TITLE = $csvarr[2][6];
$TEILEART = $csvarr[2][7];
$record = vagprice::where('NUMBER', $NUMBER)->update(['NUMBER2' => $NUMBER2, 'WEIGHT' => $WEIGHT, 'VPE' => $VPE, 'VIN' => $VIN, 'NL' => $NL, 'TITLE' => $TITLE, 'TEILEART' => $TEILEART]);
dd($record); // результат 1
$NUMBER = $csvarr[1][0];
$NUMBER2 = $csvarr[1][1];
$WEIGHT = $csvarr[1][2];
$VPE = $csvarr[1][3];
$VIN = $csvarr[1][4];
$NL = $csvarr[1][5];
$TITLE = $csvarr[1][6];
$TEILEART = $csvarr[1][7];
$record = vagprice::where('NUMBER', $NUMBER)->update(['NUMBER2' => $NUMBER2, 'WEIGHT' => $WEIGHT, 'VPE' => $VPE, 'VIN' => $VIN, 'NL' => $NL, 'TITLE' => $TITLE, 'TEILEART' => $TEILEART]);
dd($record); // результат 1
$NUMBER = $csvarr[0][0];
$NUMBER2 = $csvarr[0][1];
$WEIGHT = $csvarr[0][2];
$VPE = $csvarr[0][3];
$VIN = $csvarr[0][4];
$NL = $csvarr[0][5];
$TITLE = $csvarr[0][6];
$TEILEART = $csvarr[0][7];
$record = vagprice::where('NUMBER', $NUMBER)->update(['NUMBER2' => $NUMBER2, 'WEIGHT' => $WEIGHT, 'VPE' => $VPE, 'VIN' => $VIN, 'NL' => $NL, 'TITLE' => $TITLE, 'TEILEART' => $TEILEART]);
dd($record); // результат 0
То есть первая строка из массива ни в какую не хочет вставляться.
496354;865;455;0;15;9;zestankel;propilen , Если менять строки местами в csv файле, то все равно первая не вставляется.
Это какая то фантастика, но наяву.
Здравствуйте.
Столкнулся с необьяснимым. Не хочет сохраняться в таблице первая строка двумерного массива.
Код самый простой. Перебираю в цикле массив и обновляю записи в базе.
Из двумерного массива беруться значения. Первый элемент в массиве 0, так ?
При начале цикла с нуля апдейтяться все записи кроме первой строки.
При начале цикла с 1 тоже самое, апдейтяться все записи кроме первой строки.
При начале цикла с 2, записи обновляются с начиная с третьей строки.
Не могу же я сделать переменную " $i " отрицательной ?
"Это какой то ... фиаско.
for ($i=1; $i<count($csvarr); $i=$i+1)
{
if (isset($csvarr[$i][0])) { $NUMBER = $csvarr[$i][0]; } else {$NUMBER = " ";}
if (isset($csvarr[$i][1])) { $NUMBER2 = $csvarr[$i][1]; } else {$NUMBER2 = " ";}
if (isset($csvarr[$i][2])) { $WEIGHT = $csvarr[$i][2]; } else { $WEIGHT = " ";}
if (isset($csvarr[$i][3])) { $VPE = $csvarr[$i][3]; } else {$VPE = " ";}
if (isset($csvarr[$i][4])) { $VIN = $csvarr[$i][4]; } else {$VIN = " ";}
if (isset($csvarr[$i][5])) { $NL = $csvarr[$i][5]; } else { $NL = " ";}
if (isset($csvarr[$i][6])) { $TITLE = $csvarr[$i][6]; } else { $TITLE = " ";}
if (isset($csvarr[$i][7])) { $TEILEART = $csvarr[$i][7]; } else { $TEILEART = " ";}
$record = vagprice::where('NUMBER', $NUMBER)->update(['NUMBER2' => $NUMBER2, 'WEIGHT' => $WEIGHT, 'VPE' => $VPE, 'VIN' => $VIN, 'NL' => $NL, 'TITLE' => $TITLE, 'TEILEART' => $TEILEART]);
// $i++;
}
Есть два варианта, один работает но медленно:
Ссылка Как исключить повторяющиеся записи из массива?
function unique_multidim_array($array, $key) {
$temp_array = array();
$i = 0;
$key_array = array();
foreach($array as $val) {
if (!in_array($val[$key], $key_array)) {
$key_array[$i] = $val[$key];
$temp_array[$i] = $val;
}
$i++;
}
return $temp_array;
}
$details = unique_multidim_array($details,'id');
При массиве 500к , он замирает на десятки минут и не отвечает.
И еще вариент нашел :
Cсылка: How to make a unique associative array?
Работает 6 секунд.
$comboUserPosts = array_values(array_column($comboUserPosts, null, 'link'));
echo var_export($comboUserPosts, true);
Перед записью в базу надо проверить массив ассоциированных массивов, на уникальность но одному из ключей, например NUMBER.
Кто то наверняка это уже делал. Поделитесь опытом.
1 => array:8 [
"NUMBER" => "000883011HDUER"
"NUMBER2" => "000883011HCUER"
"WEIGHT" => "104900"
"VPE" => "1800"
"VIN" => "1"
"NL" => "08"
"TITLE" => "Sitz"
"TEILEART" => ""
]
Здравствуйте.
Хочу проапдейтить записи с помощью laravel/excel
с помощью WithUpserts. Как указано в примере на оф.сайте.
Мой класс импорта здесь:
namespace App\Imports;
use App\bmwprice;
use Maatwebsite\Excel\Concerns\ToModel;
class bmwimport implements ToModel, WithUpserts
{
public function model(array $row)
{
return new bmwprice([
'NUMBER' => $row[0],
'NUMBER2' => $row[1],
'WEIGHT' => $row[2],
'VPE' => $row[3],
'VIN' => $row[4],
'NL' => $row[5],
'TITLE' => $row[6],
'TEILEART'=> $row[7],
]);
}
function uniqueBy()
{
return 'NUMBER';
}
}
Контроллер здесь:
<?php
namespace App\Http\Controllers;
use App\Imports\bmwimport;
use Maatwebsite\Excel\Facades\Excel;
use App\Http\Controllers\Controller;
class bmwimportcontroller extends Controller
{
public function import()
{
$array = Excel::toArray(new bmwimport, storage_path('/app/public/users.xlsx'));
$records = count($array);
return view('layouts.layout')->with('updated', $records);
}
}
Все должно работать но не работает. Может кто то подскажет.
Здравствуйте.
Подскажите как узнать количество вставленных записей ?
Нашел такое, будет ли оно работать для insert непонятно
For update() and delete() calls, the return value is the number of affected rows.
$affected = DB::delete("DELETE FROM chat WHERE id = {$mid}");
Сделал как сказал seohomeless
Здравствуйте.
Имеется задача импортировать прайс лист Excel или из текстового файла, выбирать отдельные столбцы
и апдейтить соответствующие столбцы в базе.
Затем выбирать некоторые столбцы из импортированного прайса и из базы, и формировать новый
Как это лучше сделать, поместяться ли два три таких массива по 150 Мб в памяти ?
Можно отключить лимит памяти в php.ini, но это дома, а на хостинге будет ППЦ...
Код что ниже не работает.Если массив не пуст то работает , если пуст выдает ошибку.
Похоже, что условие не действует.
@if (count($products))
@foreach ($products as $product)
<tr><td> {{ $product->kod }}</td></td></tr>
@endforeach
</tbody>
</table>
</div>
{{ $products->links() }}
@else
I don't have any records!
@endif
Также не удается проверить значение переменной $сcount, которая содержит количество записей.
@if (count($ccount)) не работает .
Уже решил.
Странно, так долго мучился.
БЫло:
Route::get('/suzuki', function(Request $request){
$request->session()->put('brand', 'suzuki');
$request->session()->save();
dd($request->session()->get('brand'));
return "suzuki";
});
Стало
Route::get('/suzuki', function(Request $request){
$request->session()->put('brand', 'suzuki');
return view('layouts.layout');
});
Спасибо за участие.
Здравствуйте.
Есть такая задача при выборе меню, переадресовываю пользователя на страницу, в роуте запоминаю значение переменной и хочу его дальше использовать при перемещении по сайту.
Но laravel почему то хранит старое значение, и новое значение переменной появляется только когда перезагрузиш страницу в браузере. Иначе никак.
После перезагрузки страницы новое значение появляется.
Здравствуйте.
Я читаю текстовый файл, формирую массив для загрузки в базу.
Получаю ошибку:
Symfony\Component\ErrorHandler\Error\FatalError
Allowed memory size of 536870912 bytes exhausted (tried to allocate 33554440 bytes)
Файл размером 45Мб.
Как это преодолеть.
Здравствуйте.
Есть задание разработать программу для обработки прайс листов в формате xls и в текстовом формате.
Ячейки в текстовых файлах разделены пробелами, в некоторых могут быть иные варианты разделителей.
Имеется данный модуль maatwebsite/excel (Laravel Excel)
Кто нибудь пользовался им, он обрабатывает текстовые файлы ?
Здравствуйте.
Вот учусь создавать сайты ссс. на Laravel
Дошел до авторизации кде надо применить команду
php artisan make:auth а ее нет.
пишет 'command make:auth i not defined'
Помогите найти команду.
Здравствуйте.
Я только учусь и делаю первые шаги. Хочу повторять за видеоуроками след вслед.
Но обнаружил что структурра папок в моей копии laravel отличается от той которая в видеоуроках.
А именно папок не хватает. Например не могу повторить добавление записей через tinker.
на запрос $projects = new App\Projects; отвечает, что нет такого класса, и действительно папки Projects в папке App нет.
В папке App нет множества папок.
Папки Routes совсем нет.
Видеоуроки у меня с laracasts.com и с скачанные с Udemy.
Как скачать и устанавливать 'канонический' laravel со всем необходимым для обучения ?
Страницы 1