Rumah > rangka kerja php > Laravel > teks badan

6 Petua Laravel Fasih untuk membantu anda meningkatkan kebolehbacaan kod!

青灯夜游
Lepaskan: 2022-11-15 20:08:01
ke hadapan
1839 orang telah melayarinya

Artikel ini menyusun dan berkongsi enam petua Laravel Eloquent yang boleh meningkatkan kebolehbacaan kod saya harap ia akan membantu semua orang.

6 Petua Laravel Fasih untuk membantu anda meningkatkan kebolehbacaan kod!

Eloquent ialah ORM yang digunakan oleh Laravel secara lalai. Mod rakaman aktif digunakan. Membolehkan anda berinteraksi dengan pangkalan data dengan cara yang lebih mudah. Setiap model individu mewakili jadual dalam pangkalan data yang boleh anda kendalikan. Dalam artikel ini, kami akan menunjukkan kepada anda lebih kurang rahsia, kaedah dan sifat tersembunyi yang mungkin anda tidak tahu untuk menambah baik kod anda.

Atribut penamaan ular

Atribut penamaan ular ialah atribut yang menarik. Mari lihat apa yang dinyatakan oleh kod itu:

/**
 * 指示是否在数组上使用蛇形大小写属性。
 *
 * @var bool
 */
public static $snakeAttributes = true;
Salin selepas log masuk

Orang sering menggunakan harta ini secara tidak betul untuk menukar cara harta itu diakses. Ramai orang percaya bahawa jika anda menukar harta ini, anda boleh mengakses harta itu dengan mudah menggunakan anotasi camelCase. Ini tidak berlaku. Kami amat mengesyorkan anda untuk tidak menggunakannya. Apabila model dikeluarkan sebagai tatasusunan, hanya tentukan sama ada atribut haruslah camelCase atau SnakeCase.

Jika anda ingin mengasaskan penamaan camelCase, kami mengesyorkan anda menyemak pakej Eloquence oleh Kirk Bushell.

Penomboran

Jika anda Jika anda gunakan ORM Eloquent Laravel, maka ini berita baik untuk anda. Ia menyediakan kaedah penomboran di luar kotak. Anda mungkin biasa menulis seperti ini:

$comments = Comment::paginate(20);
Salin selepas log masuk

Menggunakan kaedah ini, anda boleh menomborkan model ulasan dengan 20 entri setiap halaman. Tukar nilai ini untuk menentukan bilangan item yang dipaparkan setiap halaman. Jika tiada apa yang dinyatakan, nilai lalai digunakan, iaitu 15.

Andaikan anda mahu ulasan anda dipaparkan di berbilang tempat di tapak web anda. Selalu ada 30 komen setiap halaman. Jika anda perlu melepasi parameter 30 di mana-mana, itu masalah. Oleh itu, anda boleh menetapkan nilai lalai baharu secara langsung pada model.

protected $perPage = 30;
Salin selepas log masuk

Tambahkan nilai tersuai dalam model

Eloquent mempunyai ciri berkuasa yang dipanggil "accessor". Ciri ini membolehkan anda menambah medan tersuai pada model atau jadual yang tidak wujud dalam model. Tidak kira jika anda menggunakan nilai sedia ada atau mentakrifkan nilai baharu sepenuhnya, anda sentiasa boleh berundur. Di bawah ialah contoh cara pengakses berfungsi. Katakan terdapat model bernama user, kami menambah pengakses Nama Penuh padanya:

function getFullNameAttribute() {
    return sprintf('%s %s', $this->first_name, $this->last_name);
}
Salin selepas log masuk

Kini anda boleh mengakses atribut full_name pada model siaran, seperti berikut:

User::latest()->first()->full_name;
Salin selepas log masuk

Jika objek (seperti koleksi) dikembalikan, sifat ini tidak akan dilampirkan pada model pengguna. Tambahkan atribut$appends yang dilindungi pada model. Ia menerima tatasusunan yang mengandungi satu atau lebih medan, yang harus dilampirkan secara automatik mulai sekarang. Tulis sahaja seperti ini:

protected $appends = ['full_name'];
Salin selepas log masuk

Tambahkan mutator (penetap hartanah) untuk lajur yang tidak wujud

Mutator adalah bertentangan dengan getter. Anda boleh melakukan perkara yang sangat menarik dengannya. Sebagai contoh, tukar jenis input yang berbeza. Biar saya beritahu anda secara terperinci. Katakan anda ingin menyimpan jenis tempoh masa. Secara amnya, anda sentiasa menyimpan unit terkecil yang mungkin. Dalam kes kami, ia adalah beberapa saat. Atas sebab UX, pengguna tidak mahu memasukkan saat, seperti minit di satu tempat atau jam di tempat lain. Ini semua boleh diselesaikan dengan cepat.

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;
    }
}
Salin selepas log masuk

Kod di atas bermakna anda boleh menggunakan medan yang tidak wujud dalam jadual data itu sendiri. Medan
digunakan dalam duration_in_minutesmodel, tetapi di latar belakang, kami menggunakan duration_in_seconds untuk mengemas kini, atau mungkin menggunakan medan yang tidak wujud duration_in_hours. Mengikut logik ini, kami memanggilnya seperti ini dalam Pengawal:

class AnyController
{
    public function store()
    {
        $video->update([
            'title' => request('title'),
            'duration_in_minutes' => request('duration_in_minutes'),
        ]);
    }
}
Salin selepas log masuk

Ini akan menjimatkan masa anda melakukan pengiraan dalam pengawal, anda hanya boleh menggunakan lajur yang tidak wujud dan menggunakannya semasa melakukan pengiraan tertentu 变异器Petakan hasilnya ke medan yang betul.

Bersemangat memuatkan: dengan $with

Mari kita bercakap tentang perhubungan. Secara lalai, Laravel menggunakan pemuatan malas. Apakah maksud ini dari segi perhubungan? Kelebihan lazy loading ialah ia dapat menjimatkan memori, kerana tidak semua data perlu disimpan, dan kita boleh memuatkan data apabila diperlukan. Seperti berikut:

$comments = Comment::all();
foreach ($comments as $comment) {
    echo $comment->user->name;
}
Salin selepas log masuk

Dalam contoh di atas, kami akan mendapat semua data ulasan. Kemudian lelaran melalui ulasan dan memaparkan nama pengguna untuk setiap ulasan. Tidak ada yang salah dengan kod ini dan ia berfungsi dengan baik, tetapi kami menghadapi masalah. Pemuatan malas kini memastikan bahawa pertanyaan untuk mendapatkan pengguna hanya dilaksanakan apabila kami ingin mengeluarkan nama pengguna.

Selamat datang ke soalan N 1 pertama anda. Kenapa N 1? N ialah bilangan ulasan dan 1 ialah pertanyaan untuk mendapatkan ulasan. Contohnya, jika kami mempunyai 500 ulasan, maka pertanyaan untuk mendapatkan semua ulasan dicetuskan sekali, dan kemudian satu pertanyaan untuk mendapatkan pengguna setiap ulasan yang sepadan. Jadi 500 untuk 1 pertanyaan. Ini bermakna apabila bilangan anotasi bertambah, bilangan pertanyaan juga meningkat.

Untuk mengelakkan ini, terdapat kaedah yang dipanggil eager loading.

$comments = Comment::with('user')->get();
foreach ($comments as $comment) {
    echo $comment->user->name;
}
Salin selepas log masuk

这会以两个查询结束。第一个查询获取所有注释,第二个查询立即获取所有关联用户。在后台,会发生以下情况(简化版SQL):

SELECT id, user_id, body FROM comments;
SELECT name FROM users WHERE user_id IN (1,2,3,4,5...);
Salin selepas log masuk

不论是 10、500 还是 10000 条评论数据都不重要,我们都依旧只执行两次SQL查询。

好了,你现在已经看到如何使用渴求式加载了。但只限于如何手动使用。你还可以将整个过程自动化,以便某些关联关系总是自动通过渴求式方式加载。为此,需要给模型设定一个属性。

protected $with = [];
Salin selepas log masuk

我们可以在Comment model简单设置 protected $with = ['user'];, 从现在起,user在任何时候都会自动加载。

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

modelKeys 方法

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

User::all()->pluck('id');
Salin selepas log masuk

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

User::all()->pluck('id')->toArray();
Salin selepas log masuk

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

User::all()->modelKeys();
Salin selepas log masuk

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

protected $primaryKey = 'id';
Salin selepas log masuk

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

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

【相关推荐:laravel视频教程

Atas ialah kandungan terperinci 6 Petua Laravel Fasih untuk membantu anda meningkatkan kebolehbacaan kod!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!