Eloquent ['eləkwənt]
, 모델 클래스에도 데이터베이스 쿼리 생성자의 메소드를 사용하지만, DB::table
('테이블 이름') 부분이 생략되어 있습니다.
바운드 테이블 이름을 지정하려면 모델의 보호된 멤버 변수 $table을 사용하세요.
<?php namespace App; use Illuminate\Database\Eloquent\Model;class Flight extends Model{ /** * The table associated with the model. * * @var string */ protected $table = 'my_flights'; }
Eloquent
각 테이블에 $primaryKey
멤버 변수로 재정의될 수 있는 id라는 기본 키가 있다고 가정합니다. 또한 Eloquent
에서는 기본 키 필드가 증분 정수라고 가정합니다. 증분하지 않는 기본 키나 숫자가 아닌 기본 키를 사용하려면 모델의 public
속성 $incrementing
을 false
으로 지정해야 합니다.
기본적으로 Eloquent
은 테이블에 created_at
및 updated_at
두 개의 필드가 있을 것으로 예상하며, 필드 유형은 timestamp
입니다. 이 두 필드를 원하지 않으면 $timestamps
을 false
<?php namespace App; use Illuminate\Database\Eloquent\Model;class Flight extends Model{ /** * Indicates if the model should be timestamped. * * @var bool */ public $timestamps = false; /** * The storage format of the model's date columns. * * @var string */ protected $dateFormat = 'U'; }보호된 $connection = 'connection-name'을 사용하여 모델에서 사용하는 데이터베이스 연결을 지정하세요. Query기본 쿼리 작업#
all 메소드는 모델 테이블의 모든 결과를 반환하는 데 사용됩니다.
$flights = Flight::all();foreach ($flights as $flight) { echo $flight->name; }
메소드를 사용하여 추가할 수도 있습니다. get
$flights = App\Flight::where('active', 1) ->orderBy('name', 'desc') ->take(10) ->get();쿼리 생성자 메소드를 모델 클래스에서도 사용할 수 있음을 알 수 있습니다eloquent ORM에서
및 get
메소드는 여러 결과 세트를 쿼리합니다. 반환 값은 결과 집합에 대한 다양한 작업 방법을 제공하는 all
개체입니다. IlluminateDatabaseEloquentCollection
public function find($key, $default = null); public function contains($key, $value = null); public function modelKeys(); public function diff($items)...이 개체에는 많은 메서드가 나열되어 있습니다. API 문서를 참조하세요. 많은 수의 결과를 분할 처리하는 경우에는 청크 메소드
Flight::chunk(200, function ($flights) { foreach ($flights as $flight) { // } });를 사용하여 단일 결과 를 쿼리하고
및 find
메소드를 사용하여 단일 결과를 쿼리합니다. 결과 및 단일 모델 인스턴스가 반환됩니다. first
// 通过主键查询模型...$flight = App\Flight::find(1); // 使用约束...$flight = App\Flight::where('active', 1)->first();
메서드를 사용하면 여러 기본 키를 매개변수로 사용하여 find
개체 형식으로 반환되는 여러 결과를 반환할 수도 있습니다Collection
$flights = App\Flight::find([1, 2, 3]);결과를 찾을 수 없으면
또는 findOrFail
메서드를 사용할 수 있습니다. 이 두 가지 방법은 결과가 없으면 firstOrFail
$model = App\Flight::findOrFail(1);$model = App\Flight::where('legs', '>', 100)->firstOrFail();
IlluminateDatabaseEloquentModelNotFound<a href="http://www.php.cn/wiki/265.html" target="_blank">Exception</a>
예외를 발생시킵니다. laravel은 자동으로 사용자에게 404 응답 결과를 반환합니다. 따라서 찾을 수 없는 경우 404를 반환하려면 이 메서드를 직접 사용하여 Route::get('/api/flights/{id}', function ($id) { return App\Flight::findOrFail($id); });
Query Aggregation
Function$count = App\Flight::where('active', 1)->count();$max = App\Flight::where('active', 1)->max('price');
LengthAwarePaginator paginate( int $perPage = null, array $columns = array('*'), string $pageName = 'page', int|null $page = null)
매개변수 유형 설명
perPage int 페이지당 표시 수량columns array 쿼리 열 이름
pageName string Page number 매개변수 이름
page int 현재 페이지 번호
반환 값은
개체입니다.
$limit = 20;$page = 1;return Enterprise::paginate($limit, ['*'], 'page', $page);
삽입LengthAwarePaginator
$flight = new Flight;$flight->name = $request->name;$flight->save();save 메소드를 호출하면 Created_at 및 update_at 필드에 타임스탬프가 자동으로 설정됩니다. 일괄 할당 삽입 #을 사용하여 수동으로 지정할 필요가 없습니다. 모델 속성에 값을 일괄적으로 할당하는 삽입 작업을 수행할 수 있습니다. 이 메서드는 새로 삽입된 모델을 반환합니다.
메서드를 실행하기 전에 모델에
및 속성을 지정해야 합니다. 불법 속성 할당을 방지합니다(예: 사용자가 전달한 create
속성이 데이터 테이블에 실수로 입력되는 것을 방지합니다). create
fillable
guarded
속성을 지정하는 목적은 이 속성으로 지정된 필드를 is_admin
메서드를 통해 삽입할 수 있고 다른 필드는 화이트리스트와 유사하게 필터링되는 반면
protected $fillable = ['name'];// ORprotected $guarded = ['price'];
$fillable
생성 작업을 수행할 때 화이트리스트 또는 블랙리스트 외부 필드만 업데이트할 수 있습니다. create
$flight = App\Flight::create(['name' => 'Flight 10']);
$guarded
생성 방법 외에도 사용할 수 있는 두 가지 다른 방법인 firstOrNew 및 firstOrCreate가 있습니다. .
메소드는 주어진 열 값 쌍 을 사용하여
레코드를 쿼리하고, 찾을 수 없는 경우 새 레코드를 삽입하는 데 사용됩니다.은 firstOrCreate
과 유사하지만 존재하지 않는 경우 새 모델 객체를 반환합니다. 그러나 모델은 지속되지 않으며 데이터베이스에 유지될 모델 객체를 저장하려면 수동으로 호출해야 합니다. . // 使用属性检索flight,如果不存在则创建...$flight = App\Flight::firstOrCreate(['name' => 'Flight 10']);
// 使用属性检索flight,如果不存在则创建一个模型实例...$flight = App\Flight::firstOrNew(['name' => 'Flight 10']);
UpdatefristOrNew
firstOrCreate
기본 업데이트 작업 #
$flight = App\Flight::find(1);$flight->name = 'New Flight Name';$flight->save();
也可使用update方法对多个结果进行更新
App\Flight::where('active', 1) ->where('destination', 'San Diego') ->update(['delayed' => 1]);
基本删除操作#
使用delete
方法删除模型
$flight = App\Flight::find(1);$flight->delete();
上述方法需要先查询出模型对象,然后再删除,也可以直接使用主键删除模型而不查询,使用destroy方法
App\Flight::destroy(1);App\Flight::destroy([1, 2, 3]);App\Flight::destroy(1, 2, 3);
使用约束条件删除,返回删除的行数
$deletedRows = App\Flight::where('active', 0)->delete();
软删除是在表中增加deleted_at字段,当删除记录的时候不会真实删除记录,而是设置该字段的时间戳,由Eloquent模型屏蔽已经设置该字段的数据。
要启用软删除,可以在模型中引用Illuminate\Database\Eloquent\SoftDeletes这个Trait,并且在dates属性中增加deleted_at字段。
<?phpnamespace App;use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes;class Flight extends Model{ use SoftDeletes; /** * The attributes that should be mutated to dates. * * @var array */ protected $dates = ['deleted_at']; }
要判断一个模型是否被软删除了的话,可以使用trashed方法
if ($flight->trashed()) { //}
查询软删除的模型#
包含软删除的模型#
如果模型被软删除了,普通查询是不会查询到该结果的,可以使用withTrashed方法强制返回软删除的结果
$flights = App\Flight::withTrashed() ->where('account_id', 1) ->get();// 关联操作中也可以使用 $flight->history()->withTrashed()->get();
只查询软删除的模型#
$flights = App\Flight::onlyTrashed() ->where('airline_id', 1) ->get();
还原软删除的模型#
查询到软删除的模型实例之后,调用restore方法还原
$flight->restore();
也可以在查询中使用
App\Flight::withTrashed() ->where('airline_id', 1) ->restore();// 关联操作中也可以使用 $flight->history()->restore();
强制删除(持久化删除)#
// Force deleting a single model instance...$flight->forceDelete(); // Force deleting all related models...$flight->history()->forceDelete();
上述操作后,数据会被真实删除。
위 내용은 Laravel 프레임워크 - EloquentORM의 기본 부분에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!