라라빌의 웅변을 장악한 ORM-웅변의 여행 (상)
Laravel is a web application framework with an expressive, elegant syntax, and also currently the most popular PHP framework ever existed.
Laravel에는 개발자가 응용 프로그램의 데이터베이스와 상호작용을 할 수 있도록 웅변적인 ORM이 포함되어 있다.나는 많은 사람들이'내 SQL 조회를 알았을 때 왜 ORM을 사용했는가?'라고 물어볼 수 있다는 것을 안다.내가 말하고자 하는 것은 당신의 SQL 조회를 이해할 수 있지만, 나는 당신이 한 개 또는 두 개의 데이터베이스에만 한정될 수 있지만, laraveleloquent는 많은 베이스 데이터베이스 형식을 지원한다.eloquent 명령을 작성하고laraveleloquent가 검색을 시작할 수 있도록 허락하기만 하면 됩니다.
내가 너에게 내가 무슨 말을 하는지 알려줄게. 나는 네가 이미 너의 laravel 프로젝트를 세웠다고 가정한다. 프로젝트의
config/database.php
에 정확한 데이터베이스 유형이 있다.상자를 열면 바로 사용할 수 있습니다. laravel은 MySQL을 사용하도록 설정되어 있기 때문에 이 글에서 MySQL을 계속 사용할 것입니다.'default' => env('DB_CONNECTION', 'mysql')
연결 어레이에서'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
블로그 플랫폼을 만들려면 데이터베이스에 다음 표(엔티티)가 있어야 합니다.database/migrations
폴더 아래에 있습니다. (이전은 Laravel이 데이터베이스 구조를 만드는 데 사용할 PHP 파일입니다.)이 사용자 모델은 프로젝트 사용자 테이블의 실체를 나타냅니다.app/
폴더의 사용자 모델이 어떤 모습인지 봅시다//사용자.php
<?php
namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
사용자 모델을 보면 사용자 모델은 Illuminate\Foundation\Auth\User
에서 검증 가능한 사용자 클래스로 확장되었고 뒤에 있는 이 클래스는 모델 클래스를 확장하고 많은 인터페이스를 실현했다.//밝게 비추기\기초\권한 부여\사용자.php
<?php
namespace Illuminate\Foundation\Auth;
use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\MustVerifyEmail;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\Access\Authorizable;
class User extends Model implements
AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract
{
use Authenticatable, Authorizable, CanResetPassword, MustVerifyEmail;
}
그러나 우리의 중점은 우리의 모형 수업이 될 것이다. 이것은 우리가 웅변하는 ORM의 대뇌이다.데이터베이스 실체의 모든 모델이 확장되어야 한다는 것을 나타낸다
Illuminate\Database\Eloquent\Model
.eloquent는 이 모델을 이용하여 응용 프로그램과 데이터베이스 간의 통신을 만든다.다음 명령을 실행하여 후기 모델과 이전을 만듭니다.$ php artisan make:model Post -m
Model created successfully.
Created Migration: 2020_01_07_015353_create_posts_table
여기의 - m 명령은 laravel이 포스트 모델을 만드는 동시에 이전 파일을 만드는 것을 지시합니다.응용 프로그램 이름 공간에 존재하는 생성된 포스트 모델을 봅시다.//Post.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
//
}
주의, 우리의 포스트 모델은 Illuminate\Database\Eloquent\Model
클래스를 확장했다. 이 클래스는 포스트 모델에 웅변적인 ORM의 초능력을 제공했다보호된 $테이블
만약 테이블 이름이 모델 이름과 다르다면 (laravel 프로젝트에 귀속될 테이블을 포함하는 기존 데이터베이스가 있다고 가정하면) 모델 클래스의 $table 속성을 설정하고 테이블 이름을 지정할 수 있습니다.
protected $table = 'app_posts'; // replace users with your custom table name
주의해야 할 것은 모델은 복수표 이름의 단수 형식이다. 예를 들어 사용자 모델은 사용자 표에 적용된다.보호된 $primaryKey
마찬가지로, loquent는 키를 id로 설정하지만, 보호된 $primary 키 값을 키 열 이름으로 설정하여 사용자 정의 열 이름으로 다시 쓸 수도 있습니다.
protected $primaryKey = 'post_id'; // custom column to use as primary key
주의: 우리는 후속 글에서 모델 맞춤형 제작에 관한 더 많은 내용을 토론할 것이다laravel이 다음 명령을 사용하여 테이블을 만들 수 있도록 이전을 실행합시다
$ php artisan migrate
데이터베이스/마이그레이션에서 제공하는create\uuser\u표를 보십시오. CreateUserClass의 up 방법에서light\database\migrations\Migration 클래스를 확장했습니다. 거기에서 사용자 테이블을 위한 열을 볼 수 있습니다.항목 루트의 끝에 다음 내용을 입력하십시오save () 방법
우리는 laravel 프레임워크가 제공하는 상호작용 셸을 사용하여 다음 명령을 실행할 것입니다.
$ php artisan tinker
이 셸을 사용하여 새 사용자를 만들 것입니다.>>> $user = new \App\User;
>>> $user->name = “Samfield Hawb”;
>>> $user->email = “[email protected]”;
>>> $user->password = bcrypt(“secret”);
>>> $user->save(); //eloquent save() method
>>> exit
$ Exit: Goodbye
save()
방법의 지원 아래 eloquent는 SQL insert 명령을 실행하여 우리가 어떻게 정확하게 값을 삽입할 수 있는지 생각하는 압력을 줄였다.create () 메서드
상기 코드 단편도 모델 클래스의 정태
create()
방법을 통해 실현할 수 있다. 이 방법은 키/값 대수 그룹을 받아들이고 키는 표열 이름을 나타낸다.$user = \App\User::create([
'name' => 'Samfield Hawb',
'email' => '[email protected]',
'password' => bcrypt('secret')//create an encrypted password
]);
create 방법을 실행하면 사용자는 생성된 사용자와 생성된 id 속성$user
을 포함하여 생성됩니다.보호된 $채우기 가능
이 명령은 데이터베이스에 새 사용자를 만들 수도 있습니다.다른 한편,create 방법이 우리를 위해 작동하기 위해서는 모델의protected$filleble 속성에 이 열 필드를 포함해야 합니다. 우리가 이렇게 하는 것은 Elounce가 기본적으로 모든 it모델이 대규모 분배 빈틈의 영향을 받지 않도록 보호하기 때문입니다.
Laravel 파일에 따르면
A mass-assignment vulnerability occurs when a user passes an unexpected HTTP parameter through a request, and that parameter changes a column in your database you did not expect. For example, a malicious user might send an is_admin parameter through an HTTP request, which is then passed into your model's create method, allowing the user to escalate themselves to an administrator.
따라서 $filleble 배열에 필드를 추가하면 Eloquent가 필드의 품질 분배를 허용하도록 지시합니다.
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
보호됨$guarded
속성을 채울 수 있는 반대면은protected$gaurded입니다. 저희가 대규모로 값을 부여할 수 없는 필드를 지정할 수 있습니다
/**
* The attributes that are not mass assignable.
*
* @var array
*/
protected $gaurded = [
'password',
];
all () 메서드
현재 사용자 모델을 사용하여 데이터베이스에서 모든 사용자를 검색하려면 다음과 같이 하십시오.
$users = App\User::all();
eloquent가 제공하는 시작 방법all () 를 호출하여 데이터베이스에 있는 모든 사용자의 집합을 되돌려줍니다백그라운드에서 laravel이 MySQL 명령을 실행하고 있습니다. (MySQL 데이터베이스를 사용하고 있기 때문입니다.)
SELECT * from users
수집을 통해 되돌아오면 우리는 데이터를 쉽게 사용하여 조작을 수행할 수 있다.되돌아오는 모든 사용자의 이름을 출력합니다. (사용자 테이블에 데이터가 있는 경우만) 이제 데이터베이스에서 모든 사용자의 이름을 출력합니다.foreach ($users as $user)
{
echo $user->name;
}
//Samfield Hawb
find() 메서드
Laravel Eloquent는 하나 이상의 모델 레코드의 실례를 얻는 데 사용할 수 있는
find()
방법을 제공합니다.find 방법이 메인 키에 전달될 때, 메인 키와 일치하는 단일 기록을 되돌려주고, 기록을 찾지 못하면,eloquent는null을 되돌려줍니다. $user = App\User::find(1);
여기서 Eloquent가 주 키 1을 사용하여 사용자를 검색하도록 지시합니다.SELECT * FROM users WHERE id=1
주 키 그룹도 우리 모델에 전달할 수 있는 find()
방법,$users = App\User::find([1,2,3]);
완료되면 베이스 Eloquent에서 키를 전달하는 레코드 컬렉션을 가져와 반환합니다.findOrFail() 메서드
대부분의 경우, 메인 키의 모형을 찾지 못할 때, 우리는 오류를 던지기를 원할 수도 있다.이것은 우리 모델에서
findOrFail()
방법으로 실현할 수 있다 $user = App\User::findOrFail(1);
모델을 찾을 수 없을 때 하나를 던진다Illuminate\Database\Eloquent\ModelNotFoundException
.예외를 처리하지 않으면 404 HTTP 응답이 자동으로 사용자에게 전송됩니다. 이것은 오류를 처리하는 Laravel 방법입니다.결론
지금까지 당신은 조회를 간단하게 하는 것이 얼마나 웅변적인지 기본적으로 보았습니다.우리의 여정을 계속하고 웅변의 초강대국이 행동하는 것을 볼 수 있기 때문에 나의 다음 문장을 주의해 주십시오.
Reference
이 문제에 관하여(라라빌의 웅변을 장악한 ORM-웅변의 여행 (상)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/xenoxdev/mastering-laravel-eloquent-orm-the-eloquent-journey-part-1-1571텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)