Maison >cadre php >Laravel >Parlons des connaissances de base de la conversion de champs dans Laravel

Parlons des connaissances de base de la conversion de champs dans Laravel

PHPz
PHPzoriginal
2023-04-06 16:48:171063parcourir

Lors du processus d'utilisation de Laravel, nous rencontrons souvent des situations où les champs doivent être convertis. Dans cet article, nous approfondirons les bases des conversions de champs dans Laravel, notamment comment personnaliser les types de conversion de champs.

La conversion de champ dans Laravel est utilisée pour convertir les attributs du modèle d'un format à un autre pour répondre à différents besoins commerciaux, tels que la conversion du format d'horodatage enregistré dans la base de données en un format d'heure lisible par l'homme.

Laravel fournit une multitude de types de conversion de champs, notamment la date, l'heure, le JSON, le tableau et d'autres types. En les définissant dans le modèle, nous pouvons facilement convertir les attributs du modèle. Voyons comment définir les types de conversion de champ dans Laravel :

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $casts = [
        'published_at' => 'datetime',
        'meta' => 'array',
    ];
}

Dans l'exemple ci-dessus, nous convertissons published_at en type datetime et meta Convertir en type <code>tableau. De cette façon, lorsque nous obtiendrons le modèle Post de la base de données, published_at sera automatiquement converti en une instance Carbon, meta Sera automatiquement converti en tableau PHP. <code>published_at 转换为 datetime 类型,将 meta 转换为 array 类型。这样,当我们从数据库中获取 Post 模型时,published_at 将会自动转换为 Carbon 实例,meta 将会自动转换为 PHP 数组。

除了 Laravel 内置的字段转换类型,我们也可以自定义字段转换类型,以满足特定的业务需求。下面让我们看看自定义字段转换类型的示例:

namespace App\Models;

use Carbon\Carbon;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;

class Price implements CastsAttributes
{
    public function get($model, $key, $value, $attributes)
    {
        return $value / 100;
    }

    public function set($model, $key, $value, $attributes)
    {
        return $value * 100;
    }
}

在上面的示例中,我们定义了一个名为 Price 的自定义字段转换类型,用于将模型属性从以分为单位的整数格式转换为以元为单位的浮点数格式。其中,get 方法用于将属性从数据库中读取时进行转换,set 方法用于将属性写入数据库时进行转换。

要在模型中使用自定义字段转换类型,我们只需在 $casts 属性中指定类型即可:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $casts = [
        'price' => Price::class,
    ];
}

在上面的示例中,我们将 price 属性转换为 Price 类型,这样当我们获取 Product 模型时,price 将会自动从数据库中读取以分为单位的整数格式,并转换为以元为单位的浮点数格式。

除了在模型中使用自定义字段转换类型外,我们还可以在查询构造器中使用字段转换类型,以满足特定的查询需求。下面让我们看看如何使用字段转换类型来进行查询:

$posts = Post::where('published_at', '>', now()->subDays(7))->get();

在上面的示例中,我们查询了最近 7 天内发布的文章。Laravel 会自动将 published_at 字段的值转换为 Carbon

En plus des types de conversion de champs intégrés à Laravel, nous pouvons également personnaliser les types de conversion de champs pour répondre aux besoins spécifiques de l'entreprise. Voyons un exemple de type de conversion de champ personnalisé :

rrreee

Dans l'exemple ci-dessus, nous avons défini un type de conversion de champ personnalisé nommé Prix pour convertir les propriétés du modèle de Convertir le format entier en unités en virgule flottante. format en unités. Parmi elles, la méthode get est utilisée pour convertir les attributs lors de leur lecture dans la base de données, et la méthode set est utilisée pour convertir les attributs lors de leur écriture dans la base de données. 🎜🎜Pour utiliser un type de cast de champ personnalisé dans un modèle, nous spécifions simplement le type dans l'attribut $casts : 🎜rrreee🎜Dans l'exemple ci-dessus, nous castons price Le code> L'attribut est converti en type <code>Price, de sorte que lorsque nous obtenons le modèle Produit, le prix sera automatiquement lu dans la base de données en unités de en cents au format entier et converti au format à virgule flottante en yuans. 🎜🎜En plus d'utiliser des types de conversion de champs personnalisés dans les modèles, nous pouvons également utiliser des types de conversion de champs dans les générateurs de requêtes pour répondre à des besoins de requêtes spécifiques. Voyons comment utiliser les types de conversion de champ pour interroger : 🎜rrreee🎜Dans l'exemple ci-dessus, nous recherchons les articles publiés au cours des 7 derniers jours. Laravel convertira automatiquement la valeur du champ published_at en une instance Carbon et la comparera à l'heure actuelle. 🎜🎜En bref, la conversion de champs est une fonctionnalité très importante dans Laravel, qui peut nous aider à convertir facilement les attributs du modèle pour répondre aux différents besoins commerciaux. Grâce à l'introduction de cet article, je pense que les lecteurs ont compris les connaissances de base de la conversion de champ dans Laravel, et j'espère que cela pourra aider les lecteurs à utiliser Laravel dans des projets réels. 🎜

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