Laravel 프레임워크 - EloquentORM의 기본 부분에 대한 자세한 설명

黄舟
풀어 주다: 2023-03-06 19:34:01
원래의
1670명이 탐색했습니다.

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 = &#39;my_flights&#39;;
}
로그인 후 복사

Eloquent 각 테이블에 $primaryKey 멤버 변수로 재정의될 수 있는 id라는 기본 키가 있다고 가정합니다. 또한 Eloquent에서는 기본 키 필드가 증분 정수라고 가정합니다. 증분하지 않는 기본 키나 숫자가 아닌 기본 키를 사용하려면 모델의 public 속성 $incrementingfalse으로 지정해야 합니다.
기본적으로 Eloquent은 테이블에 created_atupdated_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&#39;s date columns.
     *
     * @var string
     */
    protected $dateFormat = &#39;U&#39;;
}
로그인 후 복사

보호된 $connection = 'connection-name'을 사용하여 모델에서 사용하는 데이터베이스 연결을 지정하세요.

Query

기본 쿼리 작업#

all 메소드는 모델 테이블의 모든 결과를 반환하는 데 사용됩니다.

$flights = Flight::all();foreach ($flights as $flight) {    echo $flight->name;
}
로그인 후 복사

메소드를 사용하여 추가할 수도 있습니다. get

$flights = App\Flight::where(&#39;active&#39;, 1)
     ->orderBy(&#39;name&#39;, &#39;desc&#39;)
     ->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(&#39;active&#39;, 1)->first();
로그인 후 복사

메서드를 사용하면 여러 기본 키를 매개변수로 사용하여 find 개체 형식으로 반환되는 여러 결과를 반환할 수도 있습니다Collection

$flights = App\Flight::find([1, 2, 3]);
로그인 후 복사

결과를 찾을 수 없으면

또는 findOrFail 메서드를 사용할 수 있습니다. 이 두 가지 방법은 결과가 없으면 firstOrFail

$model = App\Flight::findOrFail(1);$model = App\Flight::where(&#39;legs&#39;, &#39;>&#39;, 100)->firstOrFail();
로그인 후 복사
IlluminateDatabaseEloquentModelNotFound<a href="//m.sbmmt.com/wiki/265.html" target="_blank">Exception</a> 예외를 발생시킵니다. laravel은 자동으로 사용자에게 404 응답 결과를 반환합니다. 따라서 찾을 수 없는 경우 404를 반환하려면 이 메서드를 직접 사용하여

Route::get(&#39;/api/flights/{id}&#39;, function ($id) {
    return App\Flight::findOrFail($id);
});
로그인 후 복사

Query Aggregation

Function

Result<를 반환할 수 있습니다. 🎜>쿼리 생성자 쿼리 방법과 동일하게 집계 함수를 사용하여 최대, 최소, 평균, 합계, 개수 등과 같은 일반적인 결과를 반환할 수 있습니다.
$count = App\Flight::where(&#39;active&#39;, 1)->count();$max = App\Flight::where(&#39;active&#39;, 1)->max(&#39;price&#39;);
로그인 후 복사

페이징 쿼리

페이징 쿼리는 페이지 지정 기능을 직접 사용할 수 있습니다.

LengthAwarePaginator paginate( 
    int $perPage = null, 
    array $columns = array(&#39;*&#39;), 
    string $pageName = &#39;page&#39;, 
    int|null $page = null)
로그인 후 복사

매개변수 설명

매개변수 유형 설명

perPage int 페이지당 표시 수량

columns array 쿼리 열 이름
pageName string Page number 매개변수 이름
page int 현재 페이지 번호

반환 값은
개체입니다.

$limit = 20;$page = 1;return Enterprise::paginate($limit, [&#39;*&#39;], &#39;page&#39;, $page);
로그인 후 복사

삽입LengthAwarePaginator

기본 삽입 작업 #

새 데이터를 삽입하려면 새 모델 인스턴스를 만든 다음 모델 속성을 설정하고 마지막으로 저장 메서드를 호출하면 됩니다

$flight = new Flight;$flight->name = $request->name;$flight->save();
로그인 후 복사

save 메소드를 호출하면 Created_at 및 update_at 필드에 타임스탬프가 자동으로 설정됩니다.

일괄 할당 삽입 #

을 사용하여 수동으로 지정할 필요가 없습니다. 모델 속성에 값을 일괄적으로 할당하는 삽입 작업을 수행할 수 있습니다. 이 메서드는 새로 삽입된 모델을 반환합니다.

메서드를 실행하기 전에 모델에

속성을 ​​지정해야 합니다. 불법 속성 할당을 방지합니다(예: 사용자가 전달한 create 속성이 데이터 테이블에 실수로 입력되는 것을 방지합니다). createfillableguarded 속성을 ​​지정하는 목적은 이 속성으로 지정된 필드를 is_admin 메서드를 통해 삽입할 수 있고 다른 필드는 화이트리스트와 유사하게 필터링되는 반면

블랙리스트 목록과 유사하며 반대입니다.

protected $fillable = [&#39;name&#39;];// ORprotected $guarded = [&#39;price&#39;];
로그인 후 복사
$fillable생성 작업을 수행할 때 화이트리스트 또는 블랙리스트 외부 필드만 업데이트할 수 있습니다. create
$flight = App\Flight::create([&#39;name&#39; => &#39;Flight 10&#39;]);
로그인 후 복사
$guarded생성 방법 외에도 사용할 수 있는 두 가지 다른 방법인 firstOrNew 및 firstOrCreate가 있습니다. .

메소드는 주어진 열 값 쌍

을 사용하여

레코드를 쿼리하고, 찾을 수 없는 경우 새 레코드를 삽입하는 데 사용됩니다.

firstOrCreate과 유사하지만 존재하지 않는 경우 새 모델 객체를 반환합니다. 그러나 모델은 지속되지 않으며 데이터베이스에 유지될 모델 객체를 저장하려면 수동으로 호출해야 합니다. .

UpdatefristOrNewfirstOrCreate기본 업데이트 작업 #

save 메소드는 새 데이터를 삽입할 때뿐만 아니라 데이터를 업데이트할 때도 사용할 수 있으므로 먼저 쿼리하려면 모델 메소드를 사용하세요. 업데이트할 데이터를 추출하고 모델 속성을 새 값으로 설정한 후 저장하여 업데이트됩니다.ated_at 필드가 자동으로 업데이트됩니다.

$flight = App\Flight::find(1);$flight->name = &#39;New Flight Name&#39;;$flight->save();
로그인 후 복사

也可使用update方法对多个结果进行更新

App\Flight::where(&#39;active&#39;, 1)
    ->where(&#39;destination&#39;, &#39;San Diego&#39;)
    ->update([&#39;delayed&#39; => 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(&#39;active&#39;, 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 = [&#39;deleted_at&#39;];
}
로그인 후 복사

要判断一个模型是否被软删除了的话,可以使用trashed方法

if ($flight->trashed()) {    //}
로그인 후 복사

查询软删除的模型#

包含软删除的模型#

如果模型被软删除了,普通查询是不会查询到该结果的,可以使用withTrashed方法强制返回软删除的结果

$flights = App\Flight::withTrashed()
      ->where(&#39;account_id&#39;, 1)
      ->get();// 关联操作中也可以使用
$flight->history()->withTrashed()->get();
로그인 후 복사

只查询软删除的模型#

$flights = App\Flight::onlyTrashed()
      ->where(&#39;airline_id&#39;, 1)
      ->get();
로그인 후 복사

还原软删除的模型#

查询到软删除的模型实例之后,调用restore方法还原

$flight->restore();
로그인 후 복사

也可以在查询中使用

App\Flight::withTrashed()
    ->where(&#39;airline_id&#39;, 1)
    ->restore();// 关联操作中也可以使用
$flight->history()->restore();
로그인 후 복사

强制删除(持久化删除)#

// Force deleting a single model instance...$flight->forceDelete();
// Force deleting all related models...$flight->history()->forceDelete();
로그인 후 복사

上述操作后,数据会被真实删除。

위 내용은 Laravel 프레임워크 - EloquentORM의 기본 부분에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿