수색…
모델 만들기
모델 생성
모델 클래스는 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
이 명령은 두 개의 파일을 만듭니다.
- 앱 폴더 :
app/Cat.php
- 데이터베이스 폴더에서 :
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 로 변환되고 복수화됩니다. 예를 들어 SpecialPerson 은 special_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 |
재산 | 기술 | 태만 |
---|---|---|
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]);