수색…


모델 만들기

모델 생성

모델 클래스는 Illuminate\Database\Eloquent\Model 확장해야합니다. 모델의 기본 위치는 /app 디렉토리입니다.

Artisan 명령을 사용하면 모델 클래스를 쉽게 생성 할 수 있습니다.

php artisan make:model [ModelName]

이렇게하면 기본적으로 app/[ModelName].php 라는 새 PHP 파일이 생성되며 기본 설정에 필요한 클래스, 네임 스페이스 및 사용을 포함하는 새 모델의 모든 상용구가 포함됩니다.

모델과 함께 마이그레이션 파일을 만들려면 다음 명령을 사용하십시오. 여기서 -m 은 마이그레이션 파일도 생성합니다.

php artisan make:model [ModelName] -m

모델을 만드는 것 외에도 모델에 연결되는 데이터베이스 마이그레이션이 만들어집니다. 데이터베이스 이전 PHP 파일은 기본적으로 database/migrations/ 있습니다. 기본적으로 id 및 created_at / updated_at 열 이외의 요소는 포함하지 않으므로 추가 열을 제공하기 위해 파일을 편집해야합니다.

프로젝트 루트에서 php artisan migrate 를 사용하여 모델이 작동하기 시작하려면 마이그레이션 파일을 설정 한 후에 마이그레이션을 실행해야합니다

또한 나중에 모델을 만든 후에 마이그레이션을 추가하려는 경우 다음을 실행하여 마이그레이션을 추가 할 수 있습니다.

php artisan make:migration [migration name]

예를 들어 고양이를위한 모델을 만들고 싶다고 가정 해보십시오. 두 가지 방법 중 하나를 선택하면 이전 여부에 상관없이 만들 수 있습니다. 고양이 표가 이미 있거나 현재 표를 만들지 않으려는 경우 마이그레이션하지 않고 만들 것입니다.

이 예에서는 테이블이 없기 때문에 마이그레이션을 만들고 싶으므로 다음 명령을 실행합니다.

php artisan make:model Cat -m

이 명령은 두 개의 파일을 만듭니다.

  1. 앱 폴더 : app/Cat.php
  2. 데이터베이스 폴더에서 : database/migrations/timestamp_creat_cats_table.php

우리가 관심을 갖고있는 파일은 후자인데,이 파일은 테이블을 보이고 포함시키고 자하는 것을 결정할 수 있습니다. 사전 정의 된 마이그레이션의 경우 자동 증분 ID 열과 타임 스탬프 열이 제공됩니다.

아래의 마이그레이션 파일 추출 예제는 위의 미리 정의 된 열과 cat, age 및 color의 이름을 추가 한 것입니다.

public function up()
    {
        Schema::create('cats', function (Blueprint $table) {

            $table->increments('id');    //Predefined ID
            $table->string('name');      //Name
            $table->integer('age');      //Age
            $table->string('colour');    //Colour
            $table->timestamps();        //Predefined Timestamps

        });
    }

따라서 테이블에 대한 모델 및 마이그레이션을 만드는 것은 상대적으로 쉽습니다. 그런 다음 마이그레이션을 실행하고 데이터베이스에서 마이그레이션을 생성하려면 다음 명령을 실행합니다.

php artisan migrate

미해결 된 마이그레이션을 데이터베이스로 마이그레이션합니다.


모델 파일 위치

PSR4 덕분에 어디서든 모델을 저장할 수 있습니다.

기본적으로 모델은에서 만든 app 의 네임 스페이스와 디렉토리 App . 보다 복잡한 애플리케이션의 경우 일반적으로 앱 아키텍처에 적합한 구조로 모델을 자체 폴더에 저장하는 것이 좋습니다.

예를 들어 일련의 과일을 모델로 사용한 응용 프로그램이있는 경우 app/Fruits 라는 폴더를 Banana.php 폴더 내에 Banana.php ( StudlyCase 이름 지정 규칙 유지)를 만든 다음 Banana 클래스를 만들 수 있습니다 App\Fruits 네임 스페이스에서 다음을 수행합니다.

namespace App\Fruits;

use Illuminate\Database\Eloquent\Model;

class Banana extends Model {
    // Implementation of "Banana" omitted
}

모델 구성

Eloquent는 "컨벤션 오버 컨벤션"접근법을 따른다. 기본 Model 클래스를 확장하면 모든 모델이 아래 나열된 속성을 상속받습니다. 재정의되지 않으면 다음 기본값이 적용됩니다.

재산 기술 태만
protected $connection DB 연결 이름 기본 DB 연결
protected $table 테이블 이름 기본적으로 클래스 이름은 snake_case 로 변환되고 복수화됩니다. 예를 들어 SpecialPersonspecial_people 이됩니다.
protected $primaryKey 표 PK id
public $incrementing ID가 자동으로 증가하는지 나타냅니다. true
public $timestamps 모형에 타임 스탬프를 사용해야하는지 여부를 나타냅니다. true
const CREATED_AT 생성 타임 스탬프 열의 이름입니다. created_at
const UPDATED_AT 수정 타임 스탬프 열 이름 updated_at
protected $dates timestamps 특성 외에도 DateTime으로 변형되어야하는 특성 []
protected $dateFormat 날짜 속성이 지속되는 형식 현재 SQL 언어의 기본값.
protected $with 모델로 eagerload 와의 관계 []
protected $hidden 모델 직렬화에서 속성이 생략되었습니다. []
protected $visible 모델 직렬화에 허용 된 속성 []
protected $appends 모델 직렬화에 추가 된 속성 접근 자 []
protected $fillable 대량 할당 가능한 속성 []
protected $guarded 질량 지정에서 블랙리스트 된 속성 [*] (모든 속성)
protected $touches 저장시 접촉해야하는 관계 []
protected $perPage 페이지 매김을 위해 반환 할 모델 수입니다. 15
5.0
재산 기술 태만
protected $casts 네이티브 형에 캐스트 할 필요가있는 속성 []

기존 모델 업데이트

$user = User::find(1);
$user->name = 'abc';
$user->save();

나중에 save 사용할 필요가없는 update 사용하여 여러 속성을 한 번에 업데이트 할 수도 있습니다.

$user = User::find(1);
$user->update(['name' => 'abc', 'location' => 'xyz']);

미리 쿼리하지 않고 모델을 업데이트 할 수도 있습니다.

User::where('id', '>', 2)->update(['location' => 'xyz']);

모델의 updated_at 타임 스탬프에 대한 변경을 트리거하지 않으려면 touch 옵션을 전달할 수 있습니다.

$user = User::find(1);
$user->update(['name' => 'abc', 'location' => 'xyz'], ['touch' => false]);


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow