Inhaltsverzeichnis
Angenommen, Sie möchten Bewertungen an mehreren Stellen auf Ihrer Website anzeigen. Es gibt immer 30 Kommentare pro Seite. Wenn Sie überall Parameter 30 übergeben müssen, ist das ein Problem. Daher können Sie neue Standardwerte direkt am Modell festlegen.
User::latest()->first()->full_name;
Nach dem Login kopieren
Wenn ein Objekt zurückgegeben wird (wie eine Sammlung), wird diese Eigenschaft nicht an das Benutzermodell angehängt. Fügen Sie dem Modell das protected$appends-Attribut hinzu. Es akzeptiert ein Array mit einem oder mehreren Feldern, die von nun an automatisch angehängt werden sollten. Schreiben Sie es einfach so:" >Jetzt können Sie wie folgt auf das Attribut full_name im Post-Modell zugreifen:
User::latest()->first()->full_name;
Nach dem Login kopieren
Wenn ein Objekt zurückgegeben wird (wie eine Sammlung), wird diese Eigenschaft nicht an das Benutzermodell angehängt. Fügen Sie dem Modell das protected$appends-Attribut hinzu. Es akzeptiert ein Array mit einem oder mehreren Feldern, die von nun an automatisch angehängt werden sollten. Schreiben Sie es einfach so:
为不存在列增加一个变异器(属性设置器)
protected $with = [];
Nach dem Login kopieren
Nach dem Login kopieren
" >
protected $with = [];
Nach dem Login kopieren
Nach dem Login kopieren
modelKeys 方法
Heim PHP-Framework Laravel 6 Laravel Eloquent-Tipps, die Ihnen helfen, die Lesbarkeit des Codes zu verbessern!

6 Laravel Eloquent-Tipps, die Ihnen helfen, die Lesbarkeit des Codes zu verbessern!

Nov 15, 2022 pm 08:07 PM
php laravel

In diesem Artikel werden sechs Laravel Eloquent-Tipps zusammengestellt und geteilt, die die Lesbarkeit des Codes verbessern können. Ich hoffe, dass er für alle hilfreich ist!

6 Laravel Eloquent-Tipps, die Ihnen helfen, die Lesbarkeit des Codes zu verbessern!

Eloquent ist das von Laravel standardmäßig verwendete ORM. Der aktive Aufnahmemodus wird verwendet. Ermöglicht Ihnen eine einfachere Interaktion mit der Datenbank. Jedes einzelne Modell stellt eine Tabelle in der Datenbank dar, die Sie bearbeiten können. In diesem Artikel zeigen wir Ihnen mehr oder weniger versteckte Geheimnisse, Methoden und Eigenschaften, die Sie möglicherweise nicht kennen, um Ihren Code zu verbessern.

Schlangenbenennungsattribut

Das Schlangenbenennungsattribut ist ein interessantes Attribut. Schauen wir uns an, was der Code sagt:

/**
 * 指示是否在数组上使用蛇形大小写属性。
 *
 * @var bool
 */
public static $snakeAttributes = true;
Nach dem Login kopieren

Menschen verwenden diese Eigenschaft oft fälschlicherweise, um die Art und Weise zu ändern, wie auf die Eigenschaft zugegriffen wird. Viele Leute glauben, dass Sie, wenn Sie diese Eigenschaft ändern, mithilfe von CamelCase-Anmerkungen problemlos auf die Eigenschaft zugreifen können. Dies ist nicht der Fall. Wir empfehlen Ihnen dringend, es nicht zu verwenden. Wenn das Modell als Array ausgegeben wird, definieren Sie einfach, ob das Attribut „camelCase“ oder „SnakeCase“ sein soll.

Wenn Sie Ihre Namensgebung auf camelCase basieren möchten, empfehlen wir Ihnen, sich das Paket „Eloquence“ von Kirk Bushell von Kirk Bushell anzusehen. Es bietet eine sofort einsatzbereite Paginierungsmethode. Vielleicht kennen Sie das:

Mit dieser Methode können Sie das Kommentarmodell mit 20 Einträgen pro Seite paginieren. Ändern Sie diesen Wert, um zu definieren, wie viele Elemente pro Seite angezeigt werden. Wenn nichts angegeben wird, wird der Standardwert angewendet, der 15 ist.

Angenommen, Sie möchten Bewertungen an mehreren Stellen auf Ihrer Website anzeigen. Es gibt immer 30 Kommentare pro Seite. Wenn Sie überall Parameter 30 übergeben müssen, ist das ein Problem. Daher können Sie neue Standardwerte direkt am Modell festlegen.

protected $perPage = 30;
Nach dem Login kopieren

Benutzerdefinierte Werte im Modell hinzufügen

Eloquent verfügt über eine leistungsstarke Funktion namens „Accessor“. Mit dieser Funktion können Sie dem Modell benutzerdefinierte Felder oder Tabellen hinzufügen, die im Modell nicht vorhanden sind. Es spielt keine Rolle, ob Sie einen vorhandenen Wert verwenden oder einen völlig neuen Wert definieren, Sie können jederzeit zurückgreifen. Nachfolgend finden Sie ein Beispiel für die Funktionsweise des Accessors. Angenommen, es gibt ein Modell mit dem Namen user, dann fügen wir einen FullName-Accessor hinzu:

function getFullNameAttribute() {
    return sprintf('%s %s', $this->first_name, $this->last_name);
}
Nach dem Login kopieren

Jetzt können Sie wie folgt auf das Attribut full_name im Post-Modell zugreifen:
User::latest()->first()->full_name;
Nach dem Login kopieren
Wenn ein Objekt zurückgegeben wird (wie eine Sammlung), wird diese Eigenschaft nicht an das Benutzermodell angehängt. Fügen Sie dem Modell das protected$appends-Attribut hinzu. Es akzeptiert ein Array mit einem oder mehreren Feldern, die von nun an automatisch angehängt werden sollten. Schreiben Sie es einfach so:

protected $appends = ['full_name'];
Nach dem Login kopieren

Fügen Sie einen Mutator (Eigenschaftssetzer) für nicht vorhandene Spalten hinzuuser的模型,我们给他添加一个FullName的访问器:

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;
    }
}
Nach dem Login kopieren

现在你可以访问post模型上的full_name属性,如下:

class AnyController
{
    public function store()
    {
        $video->update([
            'title' => request('title'),
            'duration_in_minutes' => request('duration_in_minutes'),
        ]);
    }
}
Nach dem Login kopieren

如果返回对象(如集合),则此属性不会附加到用户模型。将protected$appends属性添加到模型中。它接受一个数组,其中包含一个或多个字段,从现在起应该自动追加这些字段。写成这样就可以了:

$comments = Comment::all();
foreach ($comments as $comment) {
    echo $comment->user->name;
}
Nach dem Login kopieren

为不存在列增加一个变异器(属性设置器)

变异器与获取器相反。你可以用它做些很有意思的事情。 举个例子,转换不同类型的输入。 让我来给你详细说说。假设你想要保存一种类型的时间段。通常,你总是保存尽可能小的单位。在我们的案例中是秒。由于UX的原因,用户不想输入秒,例如在一个地方输入分钟,或者在另一个地方输入小时。这一切都可以很快解决。

$comments = Comment::with('user')->get();
foreach ($comments as $comment) {
    echo $comment->user->name;
}
Nach dem Login kopieren
Nach dem Login kopieren

上述代码意味着你可以使用一个不存在于数据表本身的字段。
model中使用的是duration_in_minutes字段,但是在后台,我们使用duration_in_seconds进行更新,也有可能使用一个不存在字段duration_in_hours。根据这个逻辑,我们在Controller如此调用:

SELECT id, user_id, body FROM comments;
SELECT name FROM users WHERE user_id IN (1,2,3,4,5...);
Nach dem Login kopieren
Nach dem Login kopieren

这将节省你在控制器中进行计算的时间,你可以简单地使用不存在的列,并在执行某些计算时使用变异器

Mutatoren sind das Gegenteil von Gettern. Man kann damit wirklich interessante Dinge machen. Konvertieren Sie beispielsweise verschiedene Arten von Eingaben. Lassen Sie mich es Ihnen im Detail erzählen. Angenommen, Sie möchten einen bestimmten Zeitraum speichern. Generell speichern Sie immer die kleinstmöglichen Einheiten. In unserem Fall sind es Sekunden. Aus UX-Gründen möchten Benutzer keine Sekunden wie Minuten an einer Stelle oder Stunden an einer anderen eingeben. Das lässt sich alles schnell lösen.

protected $with = [];
Nach dem Login kopieren
Nach dem Login kopieren

Der obige Code bedeutet, dass Sie ein Feld verwenden können, das in der Datentabelle selbst nicht vorhanden ist.
Das Feld duration_in_minutes wird im Modell verwendet, aber im Hintergrund verwenden wir duration_in_seconds zum Aktualisieren, oder es ist möglich, ein nicht vorhandenes Feld < zu verwenden code>duration_in_hours. Nach dieser Logik nennen wir es im Controller so:

User::all()->pluck(&#39;id&#39;);
Nach dem Login kopieren
Nach dem Login kopieren

Dadurch sparen Sie Zeit bei Berechnungen im Controller. Sie können einfach nicht vorhandene Spalten verwenden und Mutatoren< verwenden, wenn Sie bestimmte Berechnungen/Code> durchführen Ordnen Sie die Ergebnisse den richtigen Feldern zu. <p></p>Eager Loading: mit $mit<p></p>Reden wir über Beziehungen. Standardmäßig verwendet Laravel Lazy Loading. Was bedeutet das im Hinblick auf Beziehungen? Der Vorteil des verzögerten Ladens besteht darin, dass Speicher gespart werden kann, da nicht alle Daten beibehalten werden müssen und wir Daten bei Bedarf laden können. Wie folgt: <p><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>User::all()-&gt;pluck(&amp;#39;id&amp;#39;)-&gt;toArray();</pre><div class="contentsignin">Nach dem Login kopieren</div></div><div class="contentsignin">Nach dem Login kopieren</div></div></p>Im obigen Beispiel erhalten wir alle Kommentardaten. Anschließend werden die Kommentare durchlaufen und der Benutzername für jeden Kommentar angezeigt. An diesem Code ist nichts auszusetzen und er funktioniert einwandfrei, aber wir sind auf ein Problem gestoßen. Lazy Loading stellt nun sicher, dass die Abfrage zum Abrufen des Benutzers nur dann ausgeführt wird, wenn wir den Benutzernamen ausgeben möchten. 🎜🎜Willkommen zu Ihrer ersten N+1-Frage. Warum N+1? N ist immer die Anzahl der Bewertungen und 1 ist die Abfrage, um die Bewertungen zu erhalten. Wenn wir beispielsweise 500 Bewertungen haben, wird die Abfrage zum Abrufen aller Bewertungen einmal ausgelöst und dann eine Abfrage zum Abrufen der entsprechenden Bewertungen pro Benutzer. Also 500+1 Abfrage. Das bedeutet, dass mit zunehmender Anzahl der Anmerkungen auch die Anzahl der Abfragen zunimmt. 🎜🎜Um dies zu verhindern, gibt es eine Methode namens Eager Loading. 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>$comments = Comment::with(&amp;#39;user&amp;#39;)-&gt;get(); foreach ($comments as $comment) { echo $comment-&gt;user-&gt;name; }</pre><div class="contentsignin">Nach dem Login kopieren</div></div><div class="contentsignin">Nach dem Login kopieren</div></div><p>这会以两个查询结束。第一个查询获取所有注释,第二个查询立即获取所有关联用户。在后台,会发生以下情况(简化版SQL):</p><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><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><div class="contentsignin">Nach dem Login kopieren</div></div><div class="contentsignin">Nach dem Login kopieren</div></div><p>不论是 10、500 还是 10000 条评论数据都不重要,我们都依旧只执行两次SQL查询。</p><p>好了,你现在已经看到如何使用渴求式加载了。但只限于如何手动使用。你还可以将整个过程自动化,以便某些关联关系总是自动通过渴求式方式加载。为此,需要给模型设定一个属性。</p><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>protected $with = [];</pre><div class="contentsignin">Nach dem Login kopieren</div></div><div class="contentsignin">Nach dem Login kopieren</div></div><p>我们可以在<code>Comment model简单设置 protected $with = [&#39;user&#39;];, 从现在起,user在任何时候都会自动加载。

我们还有很多种渴求式加载,有仅加载特定列、嵌套即时加载、多个即时加载等等。更多详情请Laravel文档或深入核心。

modelKeys 方法

有的时候需要查询所有的主键 ID, 查询是否复杂并不重要,大多数人可能会像这样做:

User::all()->pluck(&#39;id&#39;);
Nach dem Login kopieren
Nach dem Login kopieren

这个操作很 nice,但是返回的是一个集合,想要转换成数组的话可以使用 toArray()

User::all()->pluck(&#39;id&#39;)->toArray();
Nach dem Login kopieren
Nach dem Login kopieren

大多数情况下,上面的操作的可以简化成这样:

User::all()->modelKeys();
Nach dem Login kopieren

这种方式返回一个数组。重要的是这个方法并不会总是返回 id。 顾名思义,他是以数组的形式返回所有模型主键。主键默认是id,同时也可以在模型中定义主键名。

protected $primaryKey = &#39;id&#39;;
Nach dem Login kopieren

原文地址:https://laravel-news.com/6-eloquent-secrets

译文地址:https://www.php.cn/link/c7decb5ce28209911b545d0b1059c5e3

【相关推荐:laravel视频教程

Das obige ist der detaillierte Inhalt von6 Laravel Eloquent-Tipps, die Ihnen helfen, die Lesbarkeit des Codes zu verbessern!. 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)

PHP und Python: Vergleich von zwei beliebten Programmiersprachen PHP und Python: Vergleich von zwei beliebten Programmiersprachen Apr 14, 2025 am 12:13 AM

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

PHP: Eine Schlüsselsprache für die Webentwicklung PHP: Eine Schlüsselsprache für die Webentwicklung Apr 13, 2025 am 12:08 AM

PHP ist eine Skriptsprache, die auf der Serverseite weit verbreitet ist und insbesondere für die Webentwicklung geeignet ist. 1.PHP kann HTML einbetten, HTTP -Anforderungen und Antworten verarbeiten und eine Vielzahl von Datenbanken unterstützt. 2.PHP wird verwendet, um dynamische Webinhalte, Prozessformdaten, Zugriffsdatenbanken usw. mit starker Community -Unterstützung und Open -Source -Ressourcen zu generieren. 3. PHP ist eine interpretierte Sprache, und der Ausführungsprozess umfasst lexikalische Analyse, grammatikalische Analyse, Zusammenstellung und Ausführung. 4.PHP kann mit MySQL für erweiterte Anwendungen wie Benutzerregistrierungssysteme kombiniert werden. 5. Beim Debuggen von PHP können Sie Funktionen wie error_reporting () und var_dump () verwenden. 6. Optimieren Sie den PHP-Code, um Caching-Mechanismen zu verwenden, Datenbankabfragen zu optimieren und integrierte Funktionen zu verwenden. 7

Der aktuelle Status von PHP: Ein Blick auf Webentwicklungstrends Der aktuelle Status von PHP: Ein Blick auf Webentwicklungstrends Apr 13, 2025 am 12:20 AM

PHP bleibt in der modernen Webentwicklung wichtig, insbesondere in Content-Management- und E-Commerce-Plattformen. 1) PHP hat ein reichhaltiges Ökosystem und eine starke Rahmenunterstützung wie Laravel und Symfony. 2) Die Leistungsoptimierung kann durch OPCACHE und NGINX erreicht werden. 3) Php8.0 führt den JIT -Compiler ein, um die Leistung zu verbessern. 4) Cloud-native Anwendungen werden über Docker und Kubernetes bereitgestellt, um die Flexibilität und Skalierbarkeit zu verbessern.

Php gegen andere Sprachen: Ein Vergleich Php gegen andere Sprachen: Ein Vergleich Apr 13, 2025 am 12:19 AM

PHP eignet sich für die Webentwicklung, insbesondere für die schnelle Entwicklung und Verarbeitung dynamischer Inhalte, ist jedoch nicht gut in Anwendungen auf Datenwissenschaft und Unternehmensebene. Im Vergleich zu Python hat PHP mehr Vorteile in der Webentwicklung, ist aber nicht so gut wie Python im Bereich der Datenwissenschaft. Im Vergleich zu Java wird PHP in Anwendungen auf Unternehmensebene schlechter, ist jedoch flexibler in der Webentwicklung. Im Vergleich zu JavaScript ist PHP in der Back-End-Entwicklung präziser, ist jedoch in der Front-End-Entwicklung nicht so gut wie JavaScript.

Die dauerhafte Relevanz von PHP: Ist es noch am Leben? Die dauerhafte Relevanz von PHP: Ist es noch am Leben? Apr 14, 2025 am 12:12 AM

PHP ist immer noch dynamisch und nimmt immer noch eine wichtige Position im Bereich der modernen Programmierung ein. 1) Einfachheit und leistungsstarke Unterstützung von PHP machen es in der Webentwicklung weit verbreitet. 2) Seine Flexibilität und Stabilität machen es ausstehend bei der Behandlung von Webformularen, Datenbankoperationen und Dateiverarbeitung; 3) PHP entwickelt sich ständig weiter und optimiert, geeignet für Anfänger und erfahrene Entwickler.

PHP: Die Grundlage vieler Websites PHP: Die Grundlage vieler Websites Apr 13, 2025 am 12:07 AM

Die Gründe, warum PHP für viele Websites der bevorzugte Technologie -Stack ist, umfassen die Benutzerfreundlichkeit, die starke Unterstützung der Community und die weit verbreitete Verwendung. 1) Einfach zu erlernen und zu bedienen, geeignet für Anfänger. 2) eine riesige Entwicklergemeinschaft und eine reichhaltige Ressourcen haben. 3) in WordPress, Drupal und anderen Plattformen häufig verwendet. 4) Integrieren Sie eng in Webserver, um die Entwicklung der Entwicklung zu vereinfachen.

PHP vs. Python: Kernmerkmale und Funktionen PHP vs. Python: Kernmerkmale und Funktionen Apr 13, 2025 am 12:16 AM

PHP und Python haben jeweils ihre eigenen Vorteile und eignen sich für verschiedene Szenarien. 1.PHP ist für die Webentwicklung geeignet und bietet integrierte Webserver und reichhaltige Funktionsbibliotheken. 2. Python eignet sich für Datenwissenschaft und maschinelles Lernen mit prägnanter Syntax und einer leistungsstarken Standardbibliothek. Bei der Auswahl sollte anhand der Projektanforderungen festgelegt werden.

Zweck von PHP: Erstellen dynamischer Websites Zweck von PHP: Erstellen dynamischer Websites Apr 15, 2025 am 12:18 AM

PHP wird verwendet, um dynamische Websites zu erstellen. Zu den Kernfunktionen gehören: 1. Dynamische Inhalte generieren und Webseiten in Echtzeit generieren, indem Sie eine Verbindung mit der Datenbank herstellen; 2. Verarbeiten Sie Benutzerinteraktions- und Formulareinreichungen, überprüfen Sie Eingaben und reagieren Sie auf Operationen. 3. Verwalten Sie Sitzungen und Benutzerauthentifizierung, um eine personalisierte Erfahrung zu bieten. 4. Optimieren Sie die Leistung und befolgen Sie die Best Practices, um die Effizienz und Sicherheit der Website zu verbessern.

See all articles