Inhaltsverzeichnis
, an dem Sie das Standardverhalten überschreiben können:
-Methode, oder?
$users = User::where('approved', 1)->get();
Nach dem Login kopieren
" >
$users = User::where('approved', 1)->get();
Nach dem Login kopieren
{{ $post->author->name }}
Nach dem Login kopieren
" >
{{ $post->author->name }}
Nach dem Login kopieren
immer nach dem Feld
13. 原生查询方法
14. 复制:复制一行的副本
15. Chunk() 方法之大块数据
16. 创建模型时创建额外的东西
17. 调用 save 方法的时候指定 updated_at
18. update() 的结果是什么?
19. 把括号转换成 Eloquent 查询
20. 复数参数的 orWhere
Heim PHP-Framework Laravel Häufig verwendete Laravel Eloquent wesentliche praktische Fähigkeiten

Häufig verwendete Laravel Eloquent wesentliche praktische Fähigkeiten

Jun 13, 2020 pm 06:24 PM

Häufig verwendete Laravel Eloquent wesentliche praktische Fähigkeiten

Eloquentes ORM scheint ein einfacher Mechanismus zu sein, aber unter der Haube stecken viele halbversteckte Funktionen und wenig bekannte Möglichkeiten, mehr Funktionalität zu erreichen. In diesem Artikel werde ich ein paar Tipps zeigen.

1. Inkrementieren und Dekrementieren

Um die folgende Implementierung zu ersetzen:

$article = Article::find($article_id);
$article->read_count++;
$article->save();
Nach dem Login kopieren
Sie können dies tun:

$article = Article::find($article_id);
$article->increment('read_count');
Nach dem Login kopieren
Die folgenden Methoden können ebenfalls implementiert werden:

Article::find($article_id)->increment('read_count');
Article::find($article_id)->increment('read_count', 10); // +10
Product::find($produce_id)->decrement('stock'); // -1
Nach dem Login kopieren
2. Methode X ausführen Wenn die Ausführung von Methode X fehlschlägt, wird Methode Y ausgeführt.

Beispiel 1 –

:

Um die Implementierung des folgenden Codes zu ersetzen: findOrFail()

$user = User::find($id);
if (!$user) { abort (404); }
Nach dem Login kopieren
Sie können so schreiben:

$user = User::findOrFail($id);
Nach dem Login kopieren
Beispiel 2 –

:

Um die Implementierung des folgenden Codes zu ersetzen: firstOrCreate()

$user = User::where('email', $email)->first();
if (!$user) {
  User::create([
    'email' => $email
  ]);
}
Nach dem Login kopieren
Schreiben Sie es einfach so:

$user = User::firstOrCreate(['email' => $email]);
Nach dem Login kopieren
3 Die boot()-Methode des Modells

In einem Eloquent-Modell gibt es einen magischen Ort namens

, an dem Sie das Standardverhalten überschreiben können:

class User extends Model
{
    public static function boot()
    {
        parent::boot();
        static::updating(function($model)
        {
            // 写点日志啥的
            // 覆盖一些属性,类似这样 $model->something = transform($something);
        });
    }
}
Nach dem Login kopieren

Legen Sie den Wert bestimmter Felder fest, wenn Sie das Modellobjekt erstellen, wahrscheinlich das Die meisten Eines der beliebtesten Beispiele. Schauen wir uns an, was Sie tun sollten, wenn Sie beim Erstellen eines Modellobjekts ein UUID-Feld generieren möchten. boot()

public static function boot()
{
  parent::boot();
  self::creating(function ($model) {
    $model->uuid = (string)Uuid::generate();
  });
}
Nach dem Login kopieren
4. Assoziation mit Bedingungen und Sortierung

Allgemeine Art und Weise, Assoziationen zu definieren:

public function users() {
    return $this->hasMany('App\User');
}
Nach dem Login kopieren

Wissen Sie? Sie können auch

oder

?

auf der Grundlage des oben Gesagten hinzufügen. Wenn Sie beispielsweise bestimmte Benutzertypen zuordnen und das E-Mail-Feld zum Sortieren verwenden möchten, können Sie Folgendes tun: where

public function approvedUsers() {
    return $this->hasMany('App\User')->where('approved', 1)->orderBy('email');
}
Nach dem Login kopieren
orderBy5. Modellfunktionen: Zeit, Anhängen usw.
Einige Parameter des Eloquent-Modells liegen in Form von Klassenattributen vor. Die am häufigsten verwendeten sind:

class User extends Model {
    protected $table = 'users';
    protected $fillable = ['email', 'password']; // 可以被批量赋值字段,如 User::create() 新增时,可使用字段
    protected $dates = ['created_at', 'deleted_at']; // 需要被Carbon维护的字段名
    protected $appends = ['field1', 'field2']; // json返回时,附加的字段
}
Nach dem Login kopieren

Nicht nur diese, sondern auch:

protected $primaryKey = 'uuid'; // 更换主键
public $incrementing = false; // 设置 不自增长
protected $perPage = 25; // 定义分页每页显示数量(默认15)
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at'; //重写 时间字段名
public $timestamps = false; // 设置不需要维护时间字段
Nach dem Login kopieren
Weitere Informationen finden Sie in der Dokumentzusammenfassung der Modellklasse alle Funktionen.

6. Mehrere Datensätze nach ID abfragen

Jeder kennt die

-Methode, oder?

$user = User::find(1);
Nach dem Login kopieren

Ich bin sehr überrascht, dass nur wenige Leute wissen, dass diese Methode Arrays mit mehreren IDs als Parameter akzeptieren kann: find()

$users = User::find([1,2,3]);
Nach dem Login kopieren
7. WhereX

Es gibt einen eleganten Weg dazu Art von Code:

$users = User::where('approved', 1)->get();
Nach dem Login kopieren

wird in diese Art von Code umgewandelt:

$users = User::whereApproved(1)->get();
Nach dem Login kopieren
Ja, Sie haben es richtig gelesen, verwenden Sie den Feldnamen als Suffix und fügen Sie ihn am Ende von

hinzu , und es wird die magische Methode durchlaufen.

Darüber hinaus gibt es in Eloquent einige vordefinierte Methoden in Bezug auf die Zeit: where

User::whereDate('created_at', date('Y-m-d'));
User::whereDay('created_at', date('d'));
User::whereMonth('created_at', date('m'));
User::whereYear('created_at', date('Y'));
Nach dem Login kopieren
8 Sortieren nach Beziehung

Eine kompliziertere „Technik“. Möchten Sie Forenthemen nach den neuesten Beiträgen sortieren? Es ist eine allgemeine Anforderung, die zuletzt aktualisierten Themen in einem Forum ganz oben zu haben, oder?

Definieren Sie zunächst eine separate Beziehung für den neuesten Beitrag des Themas:

public function latestPost()
{
    return $this->hasOne(\App\Post::class)->latest();
}
Nach dem Login kopieren
Dann können wir im Controller diese „Magie“ implementieren:

$users = Topic::with('latestPost')->get()->sortByDesc('latestPost.created_at');
Nach dem Login kopieren
Eloquent: :when() – Kein if-else mehr verwenden

Viele Leute verwenden gerne „if-else“, um Abfragebedingungen zu schreiben, wie folgt:

if (request('filter_by') == 'likes') {
    $query->where('likes', '>', request('likes_amount', 0));
}
if (request('filter_by') == 'date') {
    $query->orderBy('created_at', request('ordering_rule', 'desc'));
}
Nach dem Login kopieren

Es gibt einen besseren Weg Methode- -Verwenden Sie

$query = Author::query();
$query->when(request('filter_by') == 'likes', function ($q) {
    return $q->where('likes', '>', request('likes_amount', 0));
});
$query->when(request('filter_by') == 'date', function ($q) {
    return $q->orderBy('created_at', request('ordering_rule', 'desc'));
});
Nach dem Login kopieren

Es sieht vielleicht nicht sehr elegant aus, aber seine leistungsstarke Funktion besteht darin, Parameter zu übergeben: when()

$query = User::query();
$query->when(request('role', false), function ($q, $role) {
    return $q->where('role_id', $role);
});
$authors = $query->get();
Nach dem Login kopieren
10 gibt das Standardmodellobjekt zurück

Angenommen, Sie möchten den Autor des Artikels anzeigen, dann lautet der Vorlagencode:

{{ $post->author->name }}
Nach dem Login kopieren

Aber wenn die Informationen zum Autor gelöscht oder aus irgendeinem Grund nicht festgelegt werden. Der Code gibt einen Fehler wie „Eigenschaft eines Nichtobjekts“ zurück.

Natürlich können Sie es so machen:

{{ $post->author->name ?? '' }}
Nach dem Login kopieren
Sie können es über die Eloquent-Beziehung machen:

public function author()
{
    return $this->belongsTo('App\Author')->withDefault();
}
Nach dem Login kopieren
In diesem Beispiel, wenn der Text keine Autoreninformationen enthält ,

wird ein leeres

Modellobjekt zurückgeben.

author()Darüber hinaus können wir den Eigenschaften im Standardmodellobjekt auch Standardwerte zuweisen. AppAuthor

public function author()
{
    return $this->belongsTo('App\Author')->withDefault([
        'name' => 'Guest Author'
    ]);
}
Nach dem Login kopieren
11. Sortierung nach Zuweisungsfunktion

Stellen Sie sich vor, Sie haben diesen Code:

function getFullNameAttribute()
{
  return $this->attributes['first_name'] . ' ' . $this->attributes['last_name'];
}
Nach dem Login kopieren

Sie möchten jetzt nach „vollständiger_Name“ sortieren?

$clients = Client::orderBy('full_name')->get(); //没有效果
Nach dem Login kopieren
Die Lösung ist einfach. Wir müssen die Ergebnisse sortieren, nachdem wir sie erhalten haben.

$clients = Client::get()->sortBy('full_name'); // 成功!
Nach dem Login kopieren
Beachten Sie, dass die Methodennamen unterschiedlich sind – es ist nicht orderBy, sondern sortBy

12. Standardsortierung im globalen Bereich

Was ist, wenn

immer nach dem Feld

sortiert werden soll? Sie können ihm einen globalen Geltungsbereich zuweisen. Kehren wir zu der oben erwähnten

-Methode zurück: User::all()

protected static function boot()
{
    parent::boot();

    // 按照 name 正序排序
    static::addGlobalScope('order', function (Builder $builder) {
        $builder->orderBy('name', 'asc');
    });
}
Nach dem Login kopieren
nameExtended reading Query Scope . boot()

13. 原生查询方法

有时候,我们需要在 Eloquent 语句中添加原生查询。 幸运的是,确实有这样的方法。

// whereRaw
$orders = DB::table('orders')
    ->whereRaw('price > IF(state = "TX", ?, 100)', [200])
    ->get();

// havingRaw
Product::groupBy('category_id')->havingRaw('COUNT(*) > 1')->get();

// orderByRaw
User::where('created_at', '>', '2016-01-01')
  ->orderByRaw('(updated_at - created_at) desc')
  ->get();
Nach dem Login kopieren

14. 复制:复制一行的副本

很简单。说明不是很深入,下面是复制数据库实体(一条数据)的最佳方法:

$task = Tasks::find(1);
$newTask = $task->replicate();
$newTask->save();
Nach dem Login kopieren

15. Chunk() 方法之大块数据

与 Eloquent 不完全相关,它更多的关于 Collection (集合),但是对于处理大数据集合,仍然是很有用的。你可以使用 chunk() 将这些数据分割成小数据块

修改前:

$users = User::all();
foreach ($users as $user) {
    // ...
Nach dem Login kopieren

你可以这样做:

User::chunk(100, function ($users) {
    foreach ($users as $user) {
        // ...
    }
});
Nach dem Login kopieren

16. 创建模型时创建额外的东西

我们都知道Artisan命令:

php artisan make:model Company
Nach dem Login kopieren

但是,你知道有三个有用的标记可以为模型生成相关文件吗?

php artisan make:model Company -mcr
Nach dem Login kopieren
  • -m 将创建一个迁移文件

  • -c 将创建一个控制器

  • -r 表示控制器应该是一个资源控制器

17. 调用 save 方法的时候指定 updated_at

你知道  ->save() 方法可以接受参数吗? 我们可以通过传入参数阻止它的默认行为:更新  updated_at  的值为当前时间戳。

$product = Product::find($id);
$product->updated_at = '2019-01-01 10:00:00';
$product->save(['timestamps' => false]);
Nach dem Login kopieren

这样,我们成功在  save  时指定了  updated_at  的值。

18. update() 的结果是什么?

你是否想知道这段代码实际上返回什么?

$result = $products->whereNull('category_id')->update(['category_id' => 2]);
Nach dem Login kopieren

我是说,更新操作是在数据库中执行的,但 $result 会包含什么?

答案是受影响的行。 因此如果你想检查多少行受影响, 你不需要额外调用其他任何内容 -- update() 方法会给你返回此数字。

19. 把括号转换成 Eloquent 查询

如果你有个 andor 混合的 SQL 查询,像这样子的:

... WHERE (gender = 'Male' and age >= 18) or (gender = 'Female' and age >= 65)
Nach dem Login kopieren

怎么用 Eloquent 来翻译它呢? 下面是一种错误的方式:

$q->where('gender', 'Male');
$q->orWhere('age', '>=', 18);
$q->where('gender', 'Female');
$q->orWhere('age', '>=', 65);
Nach dem Login kopieren

顺序就没对。正确的打开方式稍微复杂点,使用闭包作为子查询:

$q->where(function ($query) {
    $query->where('gender', 'Male')
        ->where('age', '>=', 18);
})->orWhere(function($query) {
    $query->where('gender', 'Female')
        ->where('age', '>=', 65);
})
Nach dem Login kopieren

20. 复数参数的 orWhere

终于,你可以传递阵列参数给 orWhere()。平常的方式:

$q->where('a', 1);
$q->orWhere('b', 2);
$q->orWhere('c', 3);
Nach dem Login kopieren

你可以这样做:

$q->where('a', 1);
$q->orWhere(['b' => 2, 'c' => 3]);
Nach dem Login kopieren

我很确定还有更多隐藏的秘诀,但我希望至少上面的其中一些对你来说是新的。

推荐教程:《Laravel教程

Das obige ist der detaillierte Inhalt vonHäufig verwendete Laravel Eloquent wesentliche praktische Fähigkeiten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist besser, Django oder Laravel? Was ist besser, Django oder Laravel? Mar 28, 2025 am 10:41 AM

Sowohl Django als auch Laravel sind Full-Stack-Frameworks. Django eignet sich für Python -Entwickler und komplexe Geschäftslogik, während Laravel für PHP -Entwickler und elegante Syntax geeignet ist. 1.Django basiert auf Python und folgt der "batteriebetriebenen" Philosophie, die für schnelle Entwicklung und hohe Parallelität geeignet ist. 2. Laravel basiert auf PHP, der die Entwicklererfahrung betont und für kleine bis mittlere Projekte geeignet ist.

Laravel und das Backend: Logik der Webanwendungen mit Strom versorgen Laravel und das Backend: Logik der Webanwendungen mit Strom versorgen Apr 11, 2025 am 11:29 AM

Wie spielt Laravel eine Rolle in der Backend -Logik? Es vereinfacht und verbessert die Backend -Entwicklung durch Routing -Systeme, eloquentorm, Authentifizierung und Autorisierung, Ereignis und Zuhörer sowie Leistungsoptimierung. 1. Das Routing -System ermöglicht die Definition der URL -Struktur und die Anforderungsverarbeitungslogik. 2.Loquentorm vereinfacht die Datenbankinteraktion. 3. Das Authentifizierungs- und Autorisierungssystem ist für die Benutzerverwaltung geeignet. 4. Die Ereignis und der Hörer implementieren locker gekoppelte Codestruktur. 5. Leistungsoptimierung verbessert die Anwendungseffizienz durch Zwischenspeicherung und Warteschlange.

Welches ist besser PHP oder Laravel? Welches ist besser PHP oder Laravel? Mar 27, 2025 pm 05:31 PM

PHP und Laravel sind nicht direkt vergleichbar, da Laravel ein PHP-basierter Framework ist. 1.PHP ist für kleine Projekte oder schnelle Prototypen geeignet, da es einfach und direkt ist. 2. Laravel ist für große Projekte oder effiziente Entwicklung geeignet, da es umfangreiche Funktionen und Werkzeuge bietet, aber eine steile Lernkurve aufweist und möglicherweise nicht so gut ist wie reines PHP.

Beispiel für Laravel -Einführung Beispiel für Laravel -Einführung Apr 18, 2025 pm 12:45 PM

Laravel ist ein PHP -Framework zum einfachen Aufbau von Webanwendungen. Es bietet eine Reihe leistungsstarker Funktionen, darunter: Installation: Installieren Sie die Laravel CLI weltweit mit Komponisten und erstellen Sie Anwendungen im Projektverzeichnis. Routing: Definieren Sie die Beziehung zwischen der URL und dem Handler in Routen/Web.php. Ansicht: Erstellen Sie eine Ansicht in Ressourcen/Ansichten, um die Benutzeroberfläche der Anwendung zu rendern. Datenbankintegration: Bietet eine Out-of-the-Box-Integration in Datenbanken wie MySQL und verwendet Migration, um Tabellen zu erstellen und zu ändern. Modell und Controller: Das Modell repräsentiert die Datenbankentität und die Controller -Prozesse HTTP -Anforderungen.

Ist Laravel ein Frontend oder ein Backend? Ist Laravel ein Frontend oder ein Backend? Mar 27, 2025 pm 05:31 PM

LaravelisabackendFrameworkBuiltonPhp, entworfene WebApplicationDevelopment.itfocuseSonserver-Sidelogic, DatabaSemanagement und Applicationsstruktur und CanBeintegratedWithFrontendTechnologies-ähnlich.

Wie man laravel lernt wie man laravel kostenlos lernt Wie man laravel lernt wie man laravel kostenlos lernt Apr 18, 2025 pm 12:51 PM

Möchten Sie das Laravel -Rahmen lernen, aber unter keinen Ressourcen oder dem wirtschaftlichen Druck leiden? Dieser Artikel bietet Ihnen ein kostenloses Lernen von Laravel und lehrt Sie, wie Sie Ressourcen wie Online -Plattformen, Dokumente und Community -Foren verwenden, um eine solide Grundlage für Ihre PHP -Entwicklungsreise zu schaffen.

Laravels Vielseitigkeit: Von einfachen Standorten zu komplexen Systemen Laravels Vielseitigkeit: Von einfachen Standorten zu komplexen Systemen Apr 13, 2025 am 12:13 AM

Das Laravel -Entwicklungsprojekt wurde aufgrund seiner Flexibilität und Kraft ausgewählt, um den Bedürfnissen unterschiedlicher Größen und Komplexität zu entsprechen. Laravel bietet Routing-System, eloquentorm, Artisan Command Line und andere Funktionen und unterstützt die Entwicklung von einfachen Blogs bis hin zu komplexen Systemen auf Unternehmensebene.

Laravel -Benutzeranmeldungsfunktion Laravel -Benutzeranmeldungsfunktion Apr 18, 2025 pm 12:48 PM

Laravel bietet einen umfassenden Auth-Framework für die Implementierung von Benutzeranmeldungsfunktionen, einschließlich: Definieren von Benutzermodellen (eloquentes Modell), Erstellen von Anmeldeformularen (Blattvorlagen-Engine), Schreiben von Login-Controllern (Erben von Auth \ Logincontroller), Überprüfung von Login-Anfragen (Auth :: Versuch) Umleitung nach Anmeldung (Redirect). Darüber hinaus enthält das Auth -Framework auch Funktionen wie das Zurücksetzen von Kennwörtern, das Registrieren und Überprüfen von E -Mails. Weitere Informationen finden Sie in der Laravel -Dokumentation: https://laravel.com/doc

See all articles