Maison  >  Article  >  cadre php  >  Quelques conseils lors de l'utilisation de Laravel

Quelques conseils lors de l'utilisation de Laravel

步履不停
步履不停original
2019-06-28 16:12:483701parcourir

Quelques conseils lors de l'utilisation de Laravel

01 : Déclencher l'horodatage du modèle parent

Comme le titre l'indique, lorsque le modèle enfant est mis à jour, l'horodatage du modèle parent peut être déclenché. Par exemple, Comment appartient à Post, ce qui est parfois utile lorsque la mise à jour d'un modèle enfant entraîne la mise à jour de l'horodatage du modèle parent. Par exemple, lorsqu'un modèle Comment est mis à jour, vous souhaitez déclencher automatiquement une mise à jour de l'horodatage Post du modèle updated_at parent. Eloquent Facilitez-vous la tâche, ajoutez simplement un attribut touch contenant le nom de la relation modèle enfant.

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
    /**
     * 涉及到的所有关联关系。
     *
     * @var array
     */
    protected $touches = [&#39;post&#39;];
    /**
     * 获取评论所属的文章。
     */
    public function post()
    {
        return $this->belongsTo('App\Post');
    }
}

02 : Précharger les colonnes exactes

Lorsque vous utilisez le préchargement, vous pouvez obtenir les colonnes spécifiées à partir de la relation.

$users = App\Book::with('author:id,name')->get();

03 : Authentifier un utilisateur pour une seule requête

Vous pouvez utiliser Auth::once() pour authentifier un utilisateur pour une seule requête. Cette méthode n'utilise pas la session Cookie. Cela signifie que cette méthode peut être utile pour créer une API sans état.

if (Auth::once($credentials)) {
    //
}

04 : Redirection vers une méthode de contrôleur avec des paramètres

Vous pouvez utiliser la méthode redirect() non seulement dans des URL ou des routes spécifiques à l'utilisateur, mais également dans des contrôleurs dans une méthode avec des paramètres.

return redirect()->action('SomeController@method', ['param' => $value]);

05 : Comment utiliser withDefault() pour éviter les erreurs dans les relations

Lorsqu'une relation est appelée, si elle n'existe pas, une erreur fatale se produira, comme $post->user->name , peut être évité en utilisant withDefault().

/** 获取文章作者 */ 
public function user() 
{     
    return $this->belongsTo('App\User')->withDefault(); 
}

06 : Dans le modèle, deux variables $loop horizontales

dans blade et foreach peuvent toujours être utilisées en utilisant variable pour obtenir le variable mère. $loop

@foreach ($users as $user)     
    @foreach ($user->posts as $post)         
        @if ($loop->parent->first)             
            This is first iteration of the parent loop.         
        @endif     
    @endforeach 
@endforeach
07 : Modifier les résultats de la requête

Après avoir exécuté la requête

, vous pouvez utiliser Eloqument pour modifier les lignes. map()

$users = User::where('role_id', 1)->get()->map(function (User $user) {
    $user->some_column = some_function($user);
    return $user;
});
08 : Utilisez facilement

dd()

en ajoutant

à la fin de Eloqument au lieu de $test->dd(). dd($result)

// 优化前
$users = User::where('name', 'Taylor')->get();
dd($users);
// 优化后
$users = User::where('name', 'Taylor')->get()->dd();
09 : utilisez hasMany pour saveMany.

S'il existe une relation

et que vous souhaitez enregistrer de nombreux objets de sous-classe de l'objet de classe parent, vous pouvez utiliser hasMany() pour obtenir votre objectif, l'effet souhaité. saveMany()

$post = Post::find(1);
$post->comments()->saveMany([
    new Comment(['message' => 'First comment']),
    new Comment(['message' => 'Second comment']),
]);
10 : Spécifier les colonnes dans

Model::all()

Lorsque vous utilisez

avec Eloqument, vous pouvez spécifier les colonnes à renvoyer. Model::all()

$users = User::all(['id', 'name', 'email']);
11 :

Blade@auth dans

Vous pouvez utiliser la directive

au lieu de l'instruction @auth pour vérifier si l'utilisateur est authentifié. if

Méthode typique :
@if(auth()->user())     // The user is authenticated. @endif
Méthode courte :
@auth    
 // The user is authenticated. 
@endauth
12 : Aperçu de l'e-mail sans envoi

Si vous utilisez

Mailables pour envoyer vos emails, vous pouvez les prévisualiser sans les envoyer.

Route::get('/mailable', function () {
    $invoice = App\Invoice::find(1);
    return new App\Mail\InvoicePaid($invoice);
});
13 : Vérification spécifique pour

hasMany

Dans la relation

de Eloquent vous pouvez filtrer les enregistrements avec n nombre d'enregistrements enfants. hasMany()

// Author -> hasMany(Book::class) 
$authors = Author::has('books', '>', 5)->get();
14 : Récupérer plusieurs suppressions logicielles

Si les enregistrements utilisent la suppression logicielle, vous pouvez récupérer plusieurs enregistrements supprimés de manière logicielle en même temps.

Post::withTrashed()->where('author_id', 1)->restore();
15 : Colonne Migration avec fuseau horaire

Le fichier de migration a non seulement un horodatage

, mais également un horodatage timestamps() avec fuseau horaire. timestampsTz()

Schema::create('employees', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('email');
    $table->timestampsTz();
});
16 : Le fichier de vue existe-t-il ?

Saviez-vous que vous pouvez également vérifier si un fichier de vue existe ?

if (view()->exists('custom.page')) {
    // Load the view
}
17 : Groupes de routage au sein des groupes

Dans les fichiers de routage, vous pouvez créer un groupe pour un groupe de routage et spécifier un middleware spécifique pour celui-ci.

Route::group(['prefix' => 'account', 'as' => 'account.'], function() {
    Route::get('login', 'AccountController@login');     
    Route::get('register', 'AccountController@register');
    Route::group(['middleware' => 'auth'], function() {         
        Route::get('edit', 'AccountController@edit');     
    });
});
18 : Méthodes de date et d'heure dans

Eloquent

, whereDay() , whereMonth() , whereYear() , whereDate() Ces méthodes sont toutes dans whereTime() Façons de vérifier les dates. Eloquent

$products = Product::whereDate('created_at', '2018-01-31')->get(); 
$products = Product::whereMonth('created_at', '12')->get(); 
$products = Product::whereDay('created_at', '31')->get(); 
$products = Product::whereYear('created_at', date('Y'))->get(); 
$products = Product::whereTime('created_at', '=', '14:13:58')->get();
19 : Utiliser

EloquentorderBy() dans la relation

Vous pouvez spécifier

directement dans la relation Eloquent. orderBy()

public function products()
{
    return $this->hasMany(Product::class);
}
public function productsByName()
{
    return $this->hasMany(Product::class)->orderBy('name');
}
20 : Entier non signé

Pour les clés étrangères migrées, n'utilisez pas

, mais utilisez integer() ou unsignedInteger(), sinon une série de problèmes apparaîtra comme une erreur. integer()->unsigned()

Schema::create('employees', function (Blueprint $table) {     
    $table->unsignedInteger('company_id');     
    $table->foreign('company_id')->references('id')->on('companies');     
});
Pour plus d'articles techniques liés à Laravel, veuillez visiter la colonne

Tutoriel Laravel pour apprendre !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn