Самый простой способ создать фильтр базы данных в Laravel?

#php #sql #laravel

#php #sql #laravel

Вопрос:

Эй, ребята, я здесь немного запутался. Я начинающий разработчик и не уверен, куда идти дальше. Мой опыт в основном состоит из HTML, CSS и JS, но сейчас я пытаюсь изучить PHP, SQL и, по сути, создать «каталог запчастей» для компании.

У меня есть файл Excel, который использует компания, который я преобразовал в CSV, а затем импортировал в базу данных MYSQL. Базовым соглашением является категория, подкатегория и производитель. Так, например, шины, грузовые шины, компания X. После жесткого кодирования страницы, чтобы получить правильный дизайн, я теперь пытаюсь перейти на Laravel и создать более разнообразное приложение. Но по сути, то, что я пытаюсь сделать, это заставить пользователя щелкнуть категорию, подкатегорию или производителя, а затем отобразить все эти элементы с помощью фильтрации SQL.

Итак, хотя я не рассматриваю конкретные рекомендации по кодированию, я был бы рад, если бы кто-нибудь, пожалуйста, показал мне, с чего вообще начать. Поиск в Google не был для меня очень полезным, поскольку многое из того, что я нахожу, связано с созданием новых элементов, редактированием существующих элементов, что мне вообще не нужно делать. Мне просто нужно отображать элементы из базы данных на странице, когда пользователь нажимает на этот конкретный столбец.

Я просмотрел несколько статей, включая разбивку на страницы и REST API, но даже это немного выше моего понимания на данный момент, поэтому я больше ищу нежный толчок в правильном направлении, куда идти, чтобы начать это делать. Я изучил основы Laravel, научился настраивать Laravel, заполнять таблицу пользователей, написать пару циклов @foreach и выяснить, как представления / модели работают в некоторой степени, но я в основном новичок в этом отношении.

Это PHP, который я написал до Laravel, чтобы жестко запрограммировать его, чтобы просто отображать что-либо от производителя под названием Trucklite. Я написал функцию JS для изменения основного изображения, также нажав на миниатюру, но я не буду утруждать себя публикацией этого.

 $conn = new mysqli($servername, $username, $password, $dbname);
$keyword = "Trucklite";

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql="SELECT part_number, item_description FROM parts WHERE 
 item_description LIKE '%{$keyword}%' LIMIT 40";

$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "<div class='catalogue-card'>".
        "<div class='catalogue-card-description'>".
            $row["item_description"].
        "</div>".

        "<div class='catalogue-card-inner'>".
            "<br /><br />".
            "<a id='image-link' href='/img/".
             $row['part_number'].
             " A.jpeg'".
             " data-fancybox='gallery'><img class='full' id='".
             // $row["part_number"].
             "full-image".
             "'".
             "style='height:200px;' src='/img/".
             $row["part_number"].
             " A.jpeg'></a>".

            "<br /><br />".

            "<img class='thumb' style='height: 50px;' src='/img/".
              $row['part_number'].
              " A.jpeg'>".

            "<img class='thumb' style='height: 50px;' src='/img/".
              $row["part_number"].
              " B.jpeg'>".

            "<img class='thumb' style='height: 50px;' src='/img/".
              $row["part_number"].
              " C.jpeg'>".

            "<img class='thumb' style='height: 50px;' src='/img/".
              $row["part_number"].
              " D.jpeg'>".

            "<br /><br />".

            "<span>Part #: </span>".
              $row["part_number"].
              "<br/><br />".
        "</div>".
    "</div>";
    }
} else {
    echo "0 results";
}
  

Так что, конечно, это действительно не элегантный способ продемонстрировать это визуально, но не намного больше. Любая помощь была бы оценена, и простите меня, если я невежественен, но я действительно чувствую разочарование и не уверен, что делать дальше.

Ответ №1:

Laravel использует Eloquent ORM, поэтому вам не нужно бороться со всем этим подключением к БД. Чтобы настроить laravel с вашей базой данных, вы должны исправить свой файл .env

 DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=yourDB
DB_USERNAME=root
DB_PASSWORD=root
  

Следующий шаг — создать вашу модель
php artisan make:model Part
После его создания вы можете использовать все необходимые данные через eloquent.

В вашем примере вы можете сделать так. файл Part.php (модель)

добавьте сюда несколько кодов

 public static function getParts($part)
{
   $data = Part::where('item_description', like, '%'.$part.'%')->take(40)->get();
   return $data;
}
  

И в вашем контроллере просто добавьте вверху

 use AppPart;
  

И вы можете вызвать свою функцию и отобразить данные

 public function ShowParts($part)
{
 $data = Part::getParts($part);
 return view('your_view', compact('data'));
}
  

Также внесите некоторые изменения в свой файл маршрута
web.php

 Route::get('/getpart/{part}', 'Controller@ShowParts');
  

После создайте файл просмотра и используйте свои данные через @foreach

 @foreach($data as $row)
<div>{{$row->part_number}}</div>
@endforeach
  

Надеюсь, это поможет вам