이 글은 코드 가독성을 향상시킬 수 있는 6가지 Laravel Eloquent 팁을 모아서 공유합니다. 모든 사람에게 도움이 되기를 바랍니다!
Eloquent는 Laravel이 기본적으로 사용하는 ORM입니다. 활성 녹화 모드가 사용됩니다. 더 쉬운 방법으로 데이터베이스와 상호 작용할 수 있습니다. 각 개별 모델은 작업할 수 있는 데이터베이스의 테이블을 나타냅니다. 이 기사에서는 코드 개선을 위해 여러분이 알지 못할 수도 있는 숨겨진 비밀, 메서드 및 속성을 다소간 보여 드리겠습니다.
Snake 명명 속성
Snake 명명 속성은 흥미로운 속성입니다. 코드 내용을 살펴보겠습니다.
/** * 指示是否在数组上使用蛇形大小写属性。 * * @var bool */ public static $snakeAttributes = true;
사람들은 종종 이 속성을 잘못 사용하여 속성에 액세스하는 방식을 변경합니다. 많은 사람들은 이 속성을 변경하면 camelCase 주석을 사용하여 속성에 쉽게 액세스할 수 있다고 생각합니다. 이것은 사실이 아닙니다. 사용하지 않는 것이 좋습니다. 모델이 배열로 출력될 때 속성이 camelCase인지 SnakeCase인지 정의하면 됩니다.
CamelCase 이름 지정을 기본으로 하고 싶다면 Kirk Bushell의 패키지 Eloquence를 확인하는 것이 좋습니다.
Pagination
Laravel의 Eloquent ORM을 사용하는 경우 이는 좋은 소식입니다. 즉시 사용 가능한 페이지 매김 방법을 제공합니다. 다음과 같은 글쓰기에 익숙할 것입니다:
$comments = Comment::paginate(20);
이 방법을 사용하면 페이지당 20개의 항목으로 주석 모델의 페이지를 매길 수 있습니다. 페이지당 표시되는 항목 수를 정의하려면 이 값을 변경합니다. 아무것도 지정하지 않으면 기본값인 15가 적용됩니다.
웹사이트의 여러 위치에 리뷰를 표시하고 싶다고 가정해 보세요. 페이지당 댓글은 항상 30개입니다. 매개변수 30을 모든 곳에서 전달해야 한다면 문제가 됩니다. 따라서 모델에서 직접 새로운 기본값을 설정할 수 있습니다.
protected $perPage = 30;
모델에 사용자 정의 값 추가
Eloquent에는 "접속자"라는 강력한 기능이 있습니다. 이 기능을 사용하면 모델에 존재하지 않는 모델이나 테이블에 사용자 정의 필드를 추가할 수 있습니다. 기존 값을 사용하거나 완전히 새로운 값을 정의하는 것은 중요하지 않으며 언제든지 대체할 수 있습니다. 다음은 접근자가 작동하는 방식의 예입니다. user
라는 모델이 있다고 가정하고 여기에 FullName 접근자를 추가합니다.user
的模型,我们给他添加一个FullName的访问器:
function getFullNameAttribute() { return sprintf('%s %s', $this->first_name, $this->last_name); }
现在你可以访问post模型上的full_name
属性,如下:
User::latest()->first()->full_name;
如果返回对象(如集合),则此属性不会附加到用户模型。将protected$appends
属性添加到模型中。它接受一个数组,其中包含一个或多个字段,从现在起应该自动追加这些字段。写成这样就可以了:
protected $appends = ['full_name'];
为不存在列增加一个变异器(属性设置器)
变异器与获取器相反。你可以用它做些很有意思的事情。 举个例子,转换不同类型的输入。 让我来给你详细说说。假设你想要保存一种类型的时间段。通常,你总是保存尽可能小的单位。在我们的案例中是秒。由于UX的原因,用户不想输入秒,例如在一个地方输入分钟,或者在另一个地方输入小时。这一切都可以很快解决。
class Video extends Model { public function setDurationInMinutes($value) { $this->attributes['duration_in_seconds'] = $value * 60; } public function setDurationInHours($value) { $this->attributes['duration_in_seconds'] = $value * 60 * 60; } }
上述代码意味着你可以使用一个不存在于数据表本身的字段。
model中使用的是duration_in_minutes
字段,但是在后台,我们使用duration_in_seconds
进行更新,也有可能使用一个不存在字段duration_in_hours
。根据这个逻辑,我们在Controller如此调用:
class AnyController { public function store() { $video->update([ 'title' => request('title'), 'duration_in_minutes' => request('duration_in_minutes'), ]); } }
这将节省你在控制器中进行计算的时间,你可以简单地使用不存在的列,并在执行某些计算时使用变异器
$comments = Comment::all(); foreach ($comments as $comment) { echo $comment->user->name; }이제 다음과 같이 post 모델의
full_name
속성에 액세스할 수 있습니다. $comments = Comment::with('user')->get();
foreach ($comments as $comment) {
echo $comment->user->name;
}
객체(컬렉션 등)가 반환되는 경우 이 속성은 사용자 모델에 연결되지 않습니다. 모델에 protected$appends
속성을 추가하세요. 이제부터 자동으로 추가되어야 하는 하나 이상의 필드를 포함하는 배열을 허용합니다. 다음과 같이 작성하세요.SELECT id, user_id, body FROM comments; SELECT name FROM users WHERE user_id IN (1,2,3,4,5...);존재하지 않는 열에 대한 mutator(속성 설정자) 추가Mutator는 getter의 반대입니다. 당신은 그것으로 정말 흥미로운 일을 할 수 있습니다. 예를 들어 다양한 유형의 입력을 변환합니다. 자세히 말씀드리겠습니다. 특정 기간 유형을 저장한다고 가정해 보겠습니다. 일반적으로 항상 가능한 가장 작은 단위를 저장합니다. 우리의 경우에는 초입니다. UX상의 이유로 사용자는 한 곳에서는 분, 다른 곳에서는 시간과 같은 초를 입력하고 싶어하지 않습니다. 이 모든 것은 빠르게 해결될 수 있습니다.
protected $with = [];위 코드는 데이터 테이블 자체에 존재하지 않는 필드를 사용할 수 있다는 의미입니다.
모델에서는
duration_in_seconds
필드가 사용되지만 백그라운드에서는 duration_in_seconds
를 사용하여 업데이트하거나 존재하지 않는 필드를 사용할 수도 있습니다. duration_in_hours. 이 논리에 따르면 컨트롤러에서 이를 다음과 같이 호출합니다. User::all()->pluck('id');이렇게 하면 컨트롤러에서 계산을 수행하는 시간이 절약됩니다. 간단히 존재하지 않는 열을 사용하고 특정 계산을 수행할 때
mutator 결과를 올바른 필드에 매핑합니다. 🎜🎜Eager loading: with $with🎜🎜관계에 대해 이야기해 봅시다. 기본적으로 Laravel은 지연 로딩을 사용합니다. 관계 측면에서 이것은 무엇을 의미합니까? 지연 로딩의 장점은 모든 데이터를 유지할 필요가 없고 필요할 때 데이터를 로드할 수 있기 때문에 메모리를 절약할 수 있다는 것입니다. 다음과 같습니다: 🎜<pre class='brush:php;toolbar:false;'>User::all()->pluck(&#39;id&#39;)->toArray();</pre>🎜위의 예에서는 모든 댓글 데이터를 가져옵니다. 그런 다음 주석을 반복하고 각 주석의 사용자 이름을 표시합니다. 이 코드에는 아무런 문제가 없으며 잘 작동하지만 문제가 발생했습니다. 이제 지연 로딩을 통해 사용자 이름을 출력하려는 경우에만 사용자를 가져오는 쿼리가 실행됩니다. 🎜🎜첫 번째 N+1 질문에 오신 것을 환영합니다. 왜 N+1인가? N은 항상 리뷰 수이고 1은 리뷰를 가져오는 쿼리입니다. 예를 들어 리뷰가 500개 있는 경우 모든 리뷰를 가져오는 쿼리가 한 번 트리거된 다음 리뷰당 해당 사용자를 가져오는 쿼리가 하나 실행됩니다. 따라서 500+1 쿼리입니다. 즉, 주석 수가 증가하면 쿼리 수도 늘어납니다. 🎜🎜이를 방지하기 위해 Eager Loading이라는 방법이 있습니다. 🎜<pre class='brush:php;toolbar:false;'>$comments = Comment::with(&#39;user&#39;)->get();
foreach ($comments as $comment) {
echo $comment->user->name;
}</pre><p>这会以两个查询结束。第一个查询获取所有注释,第二个查询立即获取所有关联用户。在后台,会发生以下情况(简化版SQL):</p><pre class='brush:php;toolbar:false;'>SELECT id, user_id, body FROM comments;
SELECT name FROM users WHERE user_id IN (1,2,3,4,5...);</pre><p>不论是 10、500 还是 10000 条评论数据都不重要,我们都依旧只执行两次SQL查询。</p>
<p>好了,你现在已经看到如何使用渴求式加载了。但只限于如何手动使用。你还可以将整个过程自动化,以便某些关联关系总是自动通过渴求式方式加载。为此,需要给模型设定一个属性。</p><pre class='brush:php;toolbar:false;'>protected $with = [];</pre><p>我们可以在<code>Comment
model简单设置 protected $with = ['user'];
, 从现在起,user
在任何时候都会自动加载。
我们还有很多种渴求式加载,有仅加载特定列、嵌套即时加载、多个即时加载等等。更多详情请Laravel文档或深入核心。
modelKeys 方法
有的时候需要查询所有的主键 ID, 查询是否复杂并不重要,大多数人可能会像这样做:
User::all()->pluck('id');
这个操作很 nice,但是返回的是一个集合,想要转换成数组的话可以使用 toArray()
。
User::all()->pluck('id')->toArray();
大多数情况下,上面的操作的可以简化成这样:
User::all()->modelKeys();
这种方式返回一个数组。重要的是这个方法并不会总是返回 id
。 顾名思义,他是以数组的形式返回所有模型主键。主键默认是id
,同时也可以在模型中定义主键名。
protected $primaryKey = 'id';
原文地址:https://laravel-news.com/6-eloquent-secrets
译文地址:https://www.php.cn/link/c7decb5ce28209911b545d0b1059c5e3
【相关推荐:laravel视频教程】
위 내용은 코드 가독성을 향상시키는 데 도움이 되는 6가지 Laravel Eloquent 팁!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 지속적인 기술 발전 시대에, Mastering Advanced Frameworks는 현대 프로그래머에게 중요합니다. 이 기사는 Laravel 프레임 워크에서 거의 알려지지 않은 기술을 공유하여 개발 기술을 향상시키는 데 도움이됩니다. 우아한 구문과 광범위한 기능으로 유명한이 기사는 강력한 기능을 파고 효율적이고 유지 관리 가능한 웹 애플리케이션을 만드는 데 도움이되는 실용적인 팁과 요령을 제공합니다.

Laravel과 ThinkPHP는 모두 인기있는 PHP 프레임 워크이며 개발에 고유 한 장점과 단점이 있습니다. 이 기사는 두 가지 깊이를 비교하여 건축, 기능 및 성능 차이를 강조하여 개발자가 특정 프로젝트 요구에 따라 정보에 입각 한 선택을 할 수 있도록 도와줍니다.

Laravel에서 사용자 로그인 기능을 구축하는 것은 중요한 작업 이며이 기사는 사용자 등록에서 로그인 검증에 이르기까지 모든 중요한 단계를 다루는 포괄적 인 개요를 제공합니다. 우리는 Laravel의 내장 검증 기능의 힘을 발휘하고 특정 요구에 맞게 로그인 프로세스를 사용자 정의하고 확장하는 것을 안내합니다. 이 단계별 지침을 따르면 Laravel 애플리케이션 사용자에게 완벽한 액세스 경험을 제공하는 안전하고 안정적인 로그인 시스템을 만들 수 있습니다.

초보자를위한 Laravel Framework 버전 선택 안내서 에서이 기사는 초보자가 많은 버전 중에서 정보에 입각 한 선택을하는 데 도움이되도록 설계된 Laravel의 버전 차이점으로 뛰어 들었습니다. 우리는 각 릴리스의 주요 기능에 중점을두고 장단점을 비교하며 초보자가 기술 수준 및 프로젝트 요구 사항에 따라 가장 적합한 Laravel 버전을 선택할 수 있도록 유용한 조언을 제공 할 것입니다. 초보자에게는 적절한 버전의 Laravel을 선택하는 것이 학습 곡선과 전반적인 개발 경험에 크게 영향을 줄 수 있기 때문에 중요합니다.

Laravel 프레임 워크에는 개발자의 다양한 요구를 충족시키기 위해 버전 번호를 쉽게 볼 수있는 내장 방법이 있습니다. 이 기사는 Composer Command Line 도구 사용, .env 파일에 액세스하거나 PHP 코드를 통해 버전 정보를 얻는 것을 포함하여 이러한 방법을 탐색합니다. 이러한 방법은 Laravel 애플리케이션의 버전 관리를 유지 관리하고 관리하는 데 필수적입니다.

Laravel은 우아한 구문과 강력한 기능으로 개발자에게 인기있는 PHP 기반 웹 응용 프로그램 프레임 워크입니다. 최신 버전은 개발 경험과 응용 프로그램 성능을 향상 시키도록 설계된 많은 개선 사항과 새로운 기능을 소개합니다. 이 기사는 Laravel의 최신 접근 방식으로 뛰어 들어 이러한 업데이트를 활용하여보다 강력하고 효율적인 웹 애플리케이션을 구축하는 방법에 중점을 둘 것입니다.

기사 요약 :이 기사는 Laravel 프레임 워크를 쉽게 설치하는 방법에 대한 독자들을 안내하기위한 자세한 단계별 지침을 제공합니다. Laravel은 웹 애플리케이션의 개발 프로세스를 가속화하는 강력한 PHP 프레임 워크입니다. 이 자습서는 시스템 요구 사항에서 데이터베이스 구성 및 라우팅 설정에 이르기까지 설치 프로세스를 다룹니다. 이러한 단계를 수행함으로써 독자들은 라벨 프로젝트를위한 탄탄한 토대를 빠르고 효율적으로 놓을 수 있습니다.

Laravel 프레임 워크를 배우고 싶지만 자원이나 경제적 압력이 없습니까? 이 기사는 Laravel의 무료 학습을 제공하며 온라인 플랫폼, 문서 및 커뮤니티 포럼과 같은 리소스를 사용하여 PHP 개발 여정을 시작하는 것에서 마스터까지의 탄탄한 토대를 마련하는 방법을 가르쳐줍니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

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

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

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.
