Laravel의 Eloquent 모델 소개
이 글은 주로 Laravel의 Eloquent 모델 소개를 소개합니다. 이제는 모든 사람과 공유합니다. 도움이 필요한 친구들이 참고할 수 있습니다.
Default 상속
useIlluminateDatabaseEloquent 수업.
데이터 테이블 이름 및 모델 이름 규칙:
데이터베이스 테이블 이름은 일반적으로 "sn"을 사용합니다. 모양을 "명명법"으로 명명합니다. 뱀 명명법에서는 단어가 소문자여야 하고 단어가 밑줄로 연결되어야 하며 이름이 복수형이어야 합니다.
해당 모델명은 "파스칼 방식"을 사용하여 명명되었습니다. 즉, 단어의 첫 글자를 대문자로 표기합니다.
위 계약에 따르지 않는 경우 해당 데이터 테이블을 지정해야 합니다. class Flight extends Model
{ /**
* 与模型关联的数据表
*
* @var string */
protected $table = 'myflights';
}
기본 데이터 테이블 모델은 id 필드를 기본 키로 사용하며 Incrementing 정수 유형입니다.
class Flight extends Model { /** * 与模型关联的数据表 */ protected $table = 'my_flights'; protected $primaryKey='mid'; //自定义主键字段 protected $keyType = 'string'; //自定义主键类型为字串 public $incrementing = false; //主键非自增型}
모델에는 기본적으로 두 개의 필드(created_at 및 update_at)가 있습니다. 두 개의 필드 없이 $timestamps를 설정할 수 있습니다.
class Flight extends Model { /** * 该模型是否被自动维护时间戳 */ public $timestamps = false; }
$dateFormat 속성은 시간 구분 형식을 사용자 정의하고 저장할 수 있습니다. 데이터 테이블 형식:
class Flight extends Model { /** * 模型的日期字段的存储格式 */ protected $dateFormat = 'U'; }
사용자 정의 시간 구분 필드 이름:
<?phpclass Flight extends Model { const CREATED_AT = 'creation_date'; const UPDATED_AT = 'last_update'; }
class Flight extends Model
{ /**
* 此模型的连接名称。 */
protected $connection = 'connection-name';
}
use App\Flight;$flights = App\Flight::all(); //查询所有数据
foreach ($flights as $flight) { echo $flight->name;
}$flights = App\Flight::where('active', 1)
->orderBy('name', 'desc')
->take(10)
->get(); //有条件地查询数据
인스턴스를 반환합니다. 대규모 데이터 배치를 쿼리하는 경우 청크를 사용하여 메모리를 절약할 수 있습니다.
Flight::chunk(200, function ($flights) { foreach ($flights as $flight) { // } });
또는 커서 방식 커서를 사용하여 메모리 사용량을 대폭 줄일 수 있습니다.
foreach (Flight::where('foo', 'bar')->cursor() as $flight) { //}
// 通过主键取回一个模型...$flight = App\Flight::find(1);
// 取回符合查询限制的第一个模型 ...
$flight = App\Flight::where('active', 1)->first();//如果找不到模型则抛出异常
//Illuminate\Database\Eloquent\ModelNotFoundException
//自动返回 HTTP 404 响应给用户
$model = App\Flight::where('legs', '>', 100)->firstOrFail();
$count = App\Flight::where('active', 1)->count();$max = App\Flight::where('active', 1)->max('price');
저장 방법: 먼저 검색한 다음 업데이트할 속성을 설정한 다음 저장 방법을 실행해야 합니다. 동시에 update_at도 자동으로 업데이트됩니다.
업데이트 방법: where 조건을 설정하고 업데이트 필드를 키-값 쌍으로 업데이트 방법에 전달합니다. 업데이트는 저장 및 업데이트된 모델 이벤트를 트리거하지 않습니다.
$flight = App\Flight::find(1); $flight->name = 'New Flight Name';$flight->save(); //查询一次后再更新 App\Flight::where('active', 1) ->where('destination', 'San Diego') ->update(['delayed' => 1]); //设置条件后再批量更新
모델을 사용하여 데이터를 생성하려면 먼저 $fillable 또는 $guarded 속성을 설정해야 합니다. 두 속성 중 하나만 선택할 수 있습니다.
class Flight extends Model { /** * 可以被批量赋值的属性。 * @var array */ protected $fillable = ['name']; }class Flight extends Model { /** * 不可被批量赋值的属性。可定义为空数组,表示所有属性都可以赋值。 * @var array */ protected $guarded = ['price']; }
데이터 삽입 방법:
$flight = App\Flight::create(['name' => 'Flight 10']); //添加新记录并返回已保存的模型实例 $flight->fill(['name' => 'Flight 22']); //已有实例模型可使用fill方法
// 通过 name 属性检索航班,当结果不存在时创建它... $flight = App\Flight::firstOrCreate(['name' => 'Flight 10']);// 通过 name 属性检索航班,当结果不存在的时候用 name 属性和 delayed 属性去创建它$flight = App\Flight::firstOrCreate( ['name' => 'Flight 10'], ['delayed' => 1] );// 通过 name 属性检索航班,当结果不存在时实例化... $flight = App\Flight::firstOrNew(['name' => 'Flight 10']);// 通过 name 属性检索航班,当结果不存在的时候用 name 属性和 delayed 属性实例化$flight = App\Flight::firstOrNew( ['name' => 'Flight 10'], ['delayed' => 1] );// 如果有从奥克兰飞往圣地亚哥的航班,将价格设为 99 美元 // 如果不存在匹配的模型就创建一个 $flight = App\Flight::updateOrCreate( ['departure' => 'Oakland', 'destination' => 'San Diego'], ['price' => 99] );
firstOrCreate: 데이터를 찾을 수 없는 경우 첫 번째 매개변수와 두 번째 매개변수 레코드를 기반으로 레코드를 생성하고 저장된 모델을 반환합니다.
firstOrNew: 데이터를 찾을 수 없는 경우 기반 on 새 모델을 생성하기 위해 첫 번째 매개변수와 두 번째 매개변수가 기록되지만 데이터가 저장되지 않습니다. 데이터를 저장하려면 수동으로 저장해야 합니다.
updateOrCreate: 첫 번째 매개변수의 조건에 따라 두 번째 매개변수 데이터를 업데이트합니다. 데이터가 존재하지 않는 경우 두 개의 매개변수 생성 기록을 병합하여 저장된 모델을 반환합니다.
모델 삭제:
$flight = App\Flight::find(1);$flight->delete(); //通过查询所得的模型实例进行delete方法删除 //通过主键删除一至多条数据:App\Flight::destroy(1); App\Flight::destroy([1, 2, 3]); App\Flight::destroy(1, 2, 3);//通过查询条件批量删除,并返回删除条数 $deletedRows = App\Flight::where('active', 0)->delete();
일괄 삭제 시 삭제 및 모델 삭제 이벤트가 발생하지 않습니다.
소프트 삭제:
데이터 테이블은 삭제된_at 필드를 설정해야 합니다. 모델의 SoftDeletes 특성을 참조하고 delete_at 필드를 $dates 속성으로 설정하세요.
<?php namespace App;use Illuminate\Database\Eloquent\Model;use Illuminate\Database\Eloquent\SoftDeletes;class Flight extends Model { use SoftDeletes; /** * 需要被转换成日期的属性。 * @var array */ protected $dates = ['deleted_at']; }
소프트 삭제 모델을 설정합니다. 삭제 메서드에서 삭제된_at가 현재 날짜와 시간으로 설정됩니다. 일시 삭제된 모델을 쿼리하면 일시 삭제된 모델이 자동으로 제외됩니다.
if ($flight->trashed()) { //检查该模型实例是否被软删除}$flights = App\Flight::withTrashed() //能使用查询包含软删除的数据 ->where('account_id', 1) ->get();$flights = App\Flight::onlyTrashed() //只查询软删除的数据 ->where('airline_id', 1) ->get();$flight->restore(); //恢复被软删除的模型App\Flight::withTrashed() //批量恢复模型,不会触发任何模型事件 ->where('airline_id', 1) ->restore();
소프트 삭제 모델은 강제 삭제를 사용합니다:
$flight->forceDelete();쿼리 범위:
모델에 쿼리 제약 조건 추가 . 전역 및 로컬의 두 가지 유형이 있습니다.
global--조건부 제약 조건은 각 쿼리에 자동으로 추가됩니다.
local--필요에 따라 로컬 제약 조건이 호출됩니다.
전역 범위:
먼저 범위 인터페이스 클래스를 구현해야 합니다.
<?php namespace App\Scopes;use Illuminate\Database\Eloquent\Scope;use Illuminate\Database\Eloquent\Model;use Illuminate\Database\Eloquent\Builder;class AgeScope implements Scope { /** * 将范围应用于给定的 Eloquent 查询生成器 * * @param \Illuminate\Database\Eloquent\Builder $builder * @param \Illuminate\Database\Eloquent\Model $model * @return void */ public function apply(Builder $builder, Model $model) { return $builder->where('age', '>', 200); } }
전역 범위가 쿼리의 select 문에 필드를 추가하려면
addSelect
方法而不是 select,以免替换查询的现有select。
전역 범위 적용:
을 사용해야 합니다. 모델 부팅 이 메소드는 addGlobalScope 메소드를 사용합니다.
<?php namespace App;use App\Scopes\AgeScope;use Illuminate\Database\Eloquent\Model;class User extends Model { /** * 模型的「启动」方法 * * @return void */ protected static function boot() { parent::boot(); static::addGlobalScope(new AgeScope); } }
클로저를 사용하면 별도의 클래스를 정의할 필요 없이 전역 범위를 정의할 수도 있습니다.
class User extends Model { /** * 模型的「启动」方法 * * @return void */ protected static function boot() { parent::boot(); static::addGlobalScope('age', function(Builder $builder) { $builder->where('age', '>', 200); }); } }
전역 범위 삭제:
User::withoutGlobalScope(AgeScope::class)->get(); //删除指定的作用域 // 删除所有的全局作用域User::withoutGlobalScopes()->get();// 删除一些全局作用域User::withoutGlobalScopes([ FirstScope::class, SecondScope::class])->get();
로컬 범위:
定义通用的约束在需要时使用。定义方法:在模型内定义scope前缀的方法。
<?php namespace App;use Illuminate\Database\Eloquent\Model;class User extends Model { /** * 限制查询只包括受欢迎的用户。 * * @return \Illuminate\Database\Eloquent\Builder */ public function scopePopular($query) { return $query->where('votes', '>', 100); } /** * 限制查询只包括活跃的用户。 * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeActive($query) { return $query->where('active', 1); } }
使用方法:
$users = App\User::popular()->active()->orderBy('created_at')->get();
动态作用域:
class User extends Model { /** * 限制查询只包括指定类型的用户。 * * @return \Illuminate\Database\Eloquent\Builder */ public function scopeOfType($query, $type) { return $query->where('type', $type); } }//调用作用域时传参$users = App\User::ofType('admin')->get();
模型事件:
retrieved
--查询触发
creating
、created--创建触发
updating
、updated--更新触发
saving
、saved--创建、更新触发
deleting
、deleted--删除触发
restoring
、restored--恢复触发
事件指派相应的监控器:
<?php namespace App;use App\Events\UserSaved;use App\Events\UserDeleted; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable;class User extends Authenticatable { use Notifiable; /** * 模型的事件映射。 * * @var array */ protected $dispatchesEvents = [ 'saved' => UserSaved::class, //触发saved事件,调用UserSaved监控器 'deleted' => UserDeleted::class, //触发deleted事件,调用UserDeleted监控器 ]; }
也可所有监听放在一个观察器类中:
<?php namespace App\Observers;use App\User;class UserObserver { /** * 监听用户创建的事件。 * * @param User $user * @return void */ public function created(User $user) { // } /** * 监听用户删除事件。 * * @param User $user * @return void */ public function deleting(User $user) { // } }
注册观察器:
<?php namespace App\Providers;use App\User;use App\Observers\UserObserver; use Illuminate\Support\ServiceProvider;class AppServiceProvider extends ServiceProvider { /** * 运行所有应用. * * @return void */ public function boot() { User::observe(UserObserver::class); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
위 내용은 Laravel의 Eloquent 모델 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Alipay PHP ...

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

세션 납치는 다음 단계를 통해 달성 할 수 있습니다. 1. 세션 ID를 얻으십시오. 2. 세션 ID 사용, 3. 세션을 활성 상태로 유지하십시오. PHP에서 세션 납치를 방지하는 방법에는 다음이 포함됩니다. 1. 세션 _regenerate_id () 함수를 사용하여 세션 ID를 재생산합니다. 2. 데이터베이스를 통해 세션 데이터를 저장하십시오.

PHP 개발에서 견고한 원칙의 적용에는 다음이 포함됩니다. 1. 단일 책임 원칙 (SRP) : 각 클래스는 하나의 기능 만 담당합니다. 2. Open and Close Principle (OCP) : 변경은 수정보다는 확장을 통해 달성됩니다. 3. Lisch의 대체 원칙 (LSP) : 서브 클래스는 프로그램 정확도에 영향을 미치지 않고 기본 클래스를 대체 할 수 있습니다. 4. 인터페이스 격리 원리 (ISP) : 의존성 및 사용되지 않은 방법을 피하기 위해 세밀한 인터페이스를 사용하십시오. 5. 의존성 반전 원리 (DIP) : 높고 낮은 수준의 모듈은 추상화에 의존하며 종속성 주입을 통해 구현됩니다.

시스템이 다시 시작된 후 UnixSocket의 권한을 자동으로 설정하는 방법. 시스템이 다시 시작될 때마다 UnixSocket의 권한을 수정하려면 다음 명령을 실행해야합니다.

phpstorm에서 CLI 모드를 디버그하는 방법은 무엇입니까? PHPStorm으로 개발할 때 때때로 CLI (Command Line Interface) 모드에서 PHP를 디버그해야합니다 ...

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.

PHP 개발에서 PHP의 CURL 라이브러리를 사용하여 JSON 데이터를 보내면 종종 외부 API와 상호 작용해야합니다. 일반적인 방법 중 하나는 컬 라이브러리를 사용하여 게시물을 보내는 것입니다 ...
