شما در این چالش باید سفری به اعماق لاراول داشته باشید و یک *driver* جدید برای اتصال به دیتابیس پیادهسازی کنید.
دیتابیس با نام `quera.json` بهصورت فایل *JSON* در اختیار شما قرار داده شده است که دارای یک جدول به نام *users* است. وظیفهی شما در این سؤال این است که اتصالی با این دیتابیس برقرار کنید و اطلاعات داخل جدول `users` را برگردانید.
<details class="green">
<summary>محتوای `quera.json`</summary>
```json
{
"users": [
{
"name": "First",
"family": "User",
"username": "quera1",
"password": "123456789"
},
{
"name": "Second",
"family": "User",
"username": "quera2",
"password": "123456789"
},
{
"name": "Third",
"family": "User",
"username": "quera3",
"password": "123456789"
},
{
"name": "Forth",
"family": "User",
"username": "quera4",
"password": "123456789"
},
{
"name": "Fifth",
"family": "User",
"username": "quera5",
"password": "123456789"
},
{
"name": "Sixth",
"family": "User",
"username": "quera6",
"password": "123456789"
}
]
}
```
</details>
# جزئیات پروژه
*در این پروژه از Laravel 8 استفاده شده است.*
پروژهی اولیه را از [این لینک](/contest/assignments/21628/download_problem_initial_project/74653/) دانلود کنید.
<details class="grey">
<summary>ساختار فایلها</summary>
```
json_database
├── app
│ ├── Console
│ │ └── Kernel.php
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ └── Controller.php
│ │ ├── Middleware
│ │ │ ├── Authenticate.php
│ │ │ ├── EncryptCookies.php
│ │ │ ├── PreventRequestsDuringMaintenance.php
│ │ │ ├── RedirectIfAuthenticated.php
│ │ │ ├── TrimStrings.php
│ │ │ ├── TrustHosts.php
│ │ │ ├── TrustProxies.php
│ │ │ └── VerifyCsrfToken.php
│ │ └── Kernel.php
│ ├── Models
│ │ └── User.php
│ └── Providers
│ ├── AppServiceProvider.php
│ ├── AuthServiceProvider.php
│ ├── BroadcastServiceProvider.php
│ ├── EventServiceProvider.php
│ └── RouteServiceProvider.php
├── bootstrap
│ ├── cache
│ │ ├── packages.php
│ │ └── services.php
│ └── app.php
├── config
│ ├── app.php
│ ├── auth.php
│ ├── broadcasting.php
│ ├── cache.php
│ ├── cors.php
│ ├── database.php
│ ├── filesystems.php
│ ├── hashing.php
│ ├── logging.php
│ ├── mail.php
│ ├── queue.php
│ ├── services.php
│ ├── session.php
│ └── view.php
├── database
│ ├── factories
│ │ └── UserFactory.php
│ ├── migrations
│ │ ├── 2014_10_12_000000_create_users_table.php
│ │ ├── 2014_10_12_100000_create_password_resets_table.php
│ │ └── 2019_08_19_000000_create_failed_jobs_table.php
│ └── seeders
│ └── DatabaseSeeder.php
├── public
│ ├── favicon.ico
│ ├── index.php
│ ├── robots.txt
│ └── web.config
├── resources
│ ├── css
│ │ └── app.css
│ ├── js
│ │ ├── app.js
│ │ └── bootstrap.js
│ ├── lang
│ │ └── en
│ │ ├── auth.php
│ │ ├── pagination.php
│ │ ├── passwords.php
│ │ └── validation.php
│ └── views
│ └── welcome.blade.php
├── routes
│ ├── api.php
│ ├── channels.php
│ ├── console.php
│ └── web.php
├── storage
│ ├── app
│ │ └── public
│ ├── framework
│ │ ├── cache
│ │ │ └── data
│ │ ├── sessions
│ │ ├── testing
│ │ └── views
│ └── logs
├── tests
│ ├── Feature
│ │ └── ExampleTest.php
│ ├── Unit
│ │ └── ExampleTest.php
│ ├── CreatesApplication.php
│ └── TestCase.php
├── README.md
├── artisan
├── composer.json
├── composer.lock
├── package.json
├── phpunit.xml
├── server.php
└── webpack.mix.js
```
</details>
<details class="brown">
<summary>راهاندازی پروژه</summary>
**برای اجرای پروژه، باید `php` و `composer` را از قبل نصب کرده باشید.**
+ ابتدا پروژهی اولیه را دانلود و از حالت فشرده خارج کنید.
+ دستور `composer install` را در پوشهی اصلی پروژه برای نصب نیازمندیها اجرا کنید.
</details>
پس از دریافت پروژه، در آدرس `database/quera.json` دیتابیس را مشاهده خواهید کرد که اگر به فایل `config/database.php` مراجعه کنید، خواهید دید که *connection* ای به نام `json` وجود دارد که اتصال با این دیتابیس را فراهم میکند. حال وظیفه شما این است که این `connection` با درایور `json` را به هستهی لاراول اضافه کنید.
```php
'json' => [
'driver' => 'json',
'ds' => base_path() . '/database/',
'database' => 'quera.json'
]
```
+ دقت کنید که نام `connection` حتماً باید `json` باشد.
پس از این که اتصال با دیتابیس را فراهم کردید، باید فقط کوئری `select` آن را بهگونهای پیادهسازی کنید تا اطلاعات جدول `users` را برگرداند. برای مثال، در کلاس `app/Http/Controllers/HomeController.php` دو دستور به صورت زیر نوشته شده است:
```php
public function index()
{
$users = User::all();
// $users = DB::table("users")->get();
return view('index', compact('users'));
}
```
این دستورات باید محتوای جدول `users` را برگردانند.
**توجه:** نام جدول ورودی مهم نیست و باید همیشه محتوای جدول `users` برگردانده شود.
# آنچه باید آپلود کنید
**توجه**: شما تنها مجاز به اعمال تغییرات در پوشهی `app` هستید.
پس از اعمال تغییرات، کل پروژه به غیر از پوشهی `vendor` را *Zip* کرده و آپلود کنید.
توجه کنید که نام فایل *Zip* اهمیتی ندارد.