Laravel по-русски

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

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

#1 Laravel 6/7/8/9/10 » Как организовать работу сайта. » 02.12.2020 16:47:49

alonewalker
Ответов: 1

У меня прайс на 500000 строк импортируется в базу, база занята минут 10.
При загрузке прайса модальная форма с выбором файла прячется и пользователь может делать что хочет.
Кроме него есть и другие пользователи.
Как  правильно организовать работу, чтобы они не редактировали записи в таблице, когда в нее загружаются обновления.
То же самое и другие пользователи могут производить подобные действия.
Можно сделать глобальную переменную в которой отображать состояние базы, и при каждом обращении в базе его проверять ?
Или запись в отдельной таблице сделать и его проверять ?

#2 Re: Laravel 6/7/8/9/10 » Почему не сохраняется в таблицу первая строка из массива в Laravel? » 01.12.2020 13:33:30

Кстати сам подумал, что может не заходит запись,
И получил при

$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)

#4 Re: Laravel 6/7/8/9/10 » Почему не сохраняется в таблицу первая строка из массива в Laravel? » 01.12.2020 11:17:21

Да есть же.
У меня две функции в контроллере, одна апдейтит одиночную запись, вторая списком из csv.
Первая функия апдейтит все записи включая первую, вторая функция списком, все кроме первой.
Убиться об стену.

#5 Re: Laravel 6/7/8/9/10 » Почему не сохраняется в таблицу первая строка из массива в Laravel? » 01.12.2020 11:02:10

Я уже не знаю.
Пробовал и 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  файле, то все равно первая не вставляется.
Это какая то фантастика, но наяву.

#6 Laravel 6/7/8/9/10 » Почему не сохраняется в таблицу первая строка из массива в Laravel? » 01.12.2020 00:29:10

alonewalker
Ответов: 9

Здравствуйте.
Столкнулся с необьяснимым. Не хочет сохраняться в таблице первая строка двумерного массива.
Код самый простой. Перебираю в цикле массив и обновляю записи в базе.
Из двумерного массива беруться значения. Первый элемент в массиве 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++;
                            }

#7 Re: Laravel 6/7/8/9/10 » как сделать уникальным массив массив ассоциированных массивов ? » 01.12.2020 00:27:18

Есть два варианта, один работает но медленно:
Ссылка Как исключить повторяющиеся записи из массива?

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);

#8 Laravel 6/7/8/9/10 » как сделать уникальным массив массив ассоциированных массивов ? » 29.11.2020 00:11:24

alonewalker
Ответов: 5

Перед записью в базу надо проверить массив ассоциированных массивов, на уникальность но одному из ключей, например NUMBER.
Кто то наверняка это уже делал. Поделитесь опытом.

1 => array:8 [
    "NUMBER" => "000883011HDUER"
    "NUMBER2" => "000883011HCUER"
    "WEIGHT" => "104900"
    "VPE" => "1800"
    "VIN" => "1"
    "NL" => "08"
    "TITLE" => "Sitz"
    "TEILEART" => ""
  ]

#9 Laravel 6/7/8/9/10 » Не удается проапдейтить столбцы laravel/excel WithUpserts » 26.11.2020 19:15:24

alonewalker
Ответов: 0

Здравствуйте.
Хочу проапдейтить записи с помощью 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);
    }
}

Все должно работать но не работает. Может кто то подскажет.

#10 Laravel 6/7/8/9/10 » Как узнать количество вставленных записей ? » 25.11.2020 14:15:58

alonewalker
Ответов: 0

Здравствуйте.
Подскажите как узнать количество вставленных записей ?

Нашел такое, будет ли оно работать для insert непонятно

For update() and delete() calls, the return value is the number of affected rows.

$affected = DB::delete("DELETE FROM chat WHERE id = {$mid}");

#12 Общий раздел » Как лучше сравнивать два массива (коллекции)? » 24.11.2020 19:08:49

alonewalker
Ответов: 3

Здравствуйте.
Имеется задача импортировать прайс лист Excel или из текстового файла, выбирать отдельные столбцы
и апдейтить соответствующие столбцы в базе.
Затем выбирать некоторые столбцы из импортированного прайса и из базы, и формировать новый
Как это лучше сделать, поместяться ли два три таких массива по 150 Мб в памяти ?
Можно отключить лимит памяти в php.ini, но это дома, а на хостинге будет ППЦ...

#13 Laravel 6/7/8/9/10 » Как проверить значение переменной в представлении ? » 24.11.2020 15:56:26

alonewalker
Ответов: 3

Код что ниже не работает.Если массив не пуст то работает , если пуст выдает ошибку.       
Похоже, что условие не действует.         
                    @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)) не работает .

#14 Re: Laravel 6/7/8/9/10 » Почему laravel обновляет переменную в сессии только после перезагрузки » 24.11.2020 12:42:58

Уже решил.
Странно, так долго мучился.

БЫло:

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');
});

Спасибо за участие.

#15 Laravel 6/7/8/9/10 » Почему laravel обновляет переменную в сессии только после перезагрузки » 23.11.2020 21:11:27

alonewalker
Ответов: 2

Здравствуйте.
Есть такая задача при выборе меню, переадресовываю пользователя на страницу, в роуте запоминаю значение переменной и хочу его дальше использовать при перемещении по сайту.
Но laravel почему то хранит старое значение, и новое значение переменной появляется только когда перезагрузиш страницу в браузере. Иначе никак.
После перезагрузки страницы новое значение появляется.

#16 Общий раздел » Ошибка превышение лимита памяти » 21.11.2020 07:58:10

alonewalker
Ответов: 2

Здравствуйте.
Я читаю текстовый файл, формирую массив для загрузки в базу.
Получаю ошибку:
Symfony\Component\ErrorHandler\Error\FatalError
Allowed memory size of 536870912 bytes exhausted (tried to allocate 33554440 bytes)

Файл размером 45Мб.
Как это преодолеть.

#17 Общий раздел » Laravel Excel и текстовые файлы » 18.11.2020 10:29:49

alonewalker
Ответов: 0

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

Есть задание разработать программу для обработки прайс листов в формате xls и в текстовом формате.
Ячейки в текстовых файлах разделены пробелами, в некоторых могут быть иные варианты разделителей.
Имеется данный модуль maatwebsite/excel (Laravel Excel)
Кто нибудь пользовался им, он обрабатывает текстовые файлы ?

#18 Laravel 5.x » нет команды php artisan make:auth » 13.09.2019 21:04:49

alonewalker
Ответов: 1

Здравствуйте.
Вот учусь создавать сайты ссс. на Laravel
Дошел до авторизации кде надо применить команду
php artisan make:auth а ее нет.
пишет 'command make:auth i not defined'
Помогите найти команду.

#19 Laravel 5.x » не хватает папок » 09.09.2019 18:44:24

alonewalker
Ответов: 1

Здравствуйте.
Я только учусь и делаю первые шаги. Хочу повторять за видеоуроками след вслед.
Но обнаружил что структурра папок в моей копии laravel отличается от той которая в видеоуроках.
А именно папок не хватает. Например не могу повторить добавление записей через tinker.
на запрос $projects = new App\Projects; отвечает, что нет такого класса, и действительно  папки Projects в  папке App нет.
В папке App нет множества папок.
Папки Routes совсем нет.
Видеоуроки у меня с laracasts.com  и с скачанные с Udemy.
Как скачать и устанавливать 'канонический' smile laravel со всем необходимым для обучения ?

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