protected $with = [];



6 Laravel Eloquent-Tipps, die Ihnen helfen, die Lesbarkeit des Codes zu verbessern!
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!
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;
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: $comments = Comment::paginate(20);
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;
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); }
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:
User::latest()->first()->full_name;
protected $appends = ['full_name'];
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; } }
现在你可以访问post模型上的full_name
属性,如下:
class AnyController { public function store() { $video->update([ 'title' => request('title'), 'duration_in_minutes' => request('duration_in_minutes'), ]); } }
如果返回对象(如集合),则此属性不会附加到用户模型。将protected$appends
属性添加到模型中。它接受一个数组,其中包含一个或多个字段,从现在起应该自动追加这些字段。写成这样就可以了:
$comments = Comment::all(); foreach ($comments as $comment) { echo $comment->user->name; }
为不存在列增加一个变异器(属性设置器)
变异器与获取器相反。你可以用它做些很有意思的事情。 举个例子,转换不同类型的输入。 让我来给你详细说说。假设你想要保存一种类型的时间段。通常,你总是保存尽可能小的单位。在我们的案例中是秒。由于UX的原因,用户不想输入秒,例如在一个地方输入分钟,或者在另一个地方输入小时。这一切都可以很快解决。
$comments = Comment::with('user')->get(); foreach ($comments as $comment) { echo $comment->user->name; }
上述代码意味着你可以使用一个不存在于数据表本身的字段。
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...);
这将节省你在控制器中进行计算的时间,你可以简单地使用不存在的列,并在执行某些计算时使用变异器
protected $with = [];
Nach dem Login kopierenNach dem Login kopieren
Der obige Code bedeutet, dass Sie ein Feld verwenden können, das in der Datentabelle selbst nicht vorhanden ist. protected $with = [];
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('id');
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()->pluck(&#39;id&#39;)->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(&#39;user&#39;)->get();
foreach ($comments as $comment) {
echo $comment->user->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 = ['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视频教程】
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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 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

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 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.

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.

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 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.

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.
