라라빌의 웅변을 장악한 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.)