Ciri Skop Pertanyaan Laravel Eloquent membolehkan pertanyaan rekursif disimpan dalam kaedah untuk menjadikan kod boleh digunakan semula. Ini memastikan kod itu bagus dan mudah difahami, terutamanya apabila jenis pertanyaan yang sama diperlukan berulang kali. Skop Pertanyaan mentakrifkan pertanyaan biasa sebagai kaedah, yang kemudiannya boleh digunakan di seluruh model.
Skop Global sentiasa dilampirkan pada model. Skop ini berfungsi secara automatik apabila anda menggunakan model, anda tidak perlu menulisnya setiap kali. Ia biasanya digunakan untuk menyemak status log masuk, rekod aktif dsb.
1. Buat kelas skop global:
Untuk mencipta Skop Global dalam Laravel, kelas yang melaksanakan antara muka Scope
digunakan.
<code class="language-php">use Illuminate\Database\Eloquent\Scope; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; class ActiveScope implements Scope { public function apply(Builder $builder, Model $model) { $builder->where('active', 1); // সক্রিয় ফিল্টার } }</code>
2. Lampirkan skop global pada model:
Ini harus ditambahkan pada booted()
kaedah model anda.
<code class="language-php">use App\Models\Post; use App\Scopes\ActiveScope; class Post extends Model { protected static function booted() { static::addGlobalScope(new ActiveScope); } }</code>
Kini menggunakan Post::all()
akan menggunakan penapis active = 1
secara automatik.
3. Mengabaikan skop global buat sementara waktu:
<code class="language-php">use Illuminate\Database\Eloquent\Scope; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; class ActiveScope implements Scope { public function apply(Builder $builder, Model $model) { $builder->where('active', 1); // সক্রিয় ফিল্টার } }</code>
Ini akan menggugurkan skop global buat sementara waktu dan mengembalikan semua siaran, kecuali penapis active
.
Skop Tempatan bertindak sebagai skop pertanyaan khusus dalam model dan hanya digunakan apabila anda memanggilnya secara eksplisit. Ia tidak digunakan secara automatik semasa setiap pertanyaan seperti skop global.
Buat skop setempat dengan menambahkan kaedah awam pada model, yang hujah pertamanya Builder
ialah input.
<code class="language-php">use App\Models\Post; use App\Scopes\ActiveScope; class Post extends Model { protected static function booted() { static::addGlobalScope(new ActiveScope); } }</code>
<code class="language-php">$posts = Post::withoutGlobalScope(ActiveScope::class)->get();</code>
Parameter boleh dihantar ke skop setempat.
<code class="language-php">use App\Models\Post; class Post extends Model { // লোকাল স্কোপ public function scopeActive($query) { return $query->where('active', 1); } public function scopeDraft($query) { return $query->where('status', 'draft'); } }</code>
Skop kini boleh digunakan dengan parameter status
:
<code class="language-php">// সক্রিয় পোস্ট পেতে: $posts = Post::active()->get(); // ড্রাফট পোস্ট পেতে: $draftPosts = Post::draft()->get(); // চেইন করে ব্যবহার: $activeDraftPosts = Post::active()->draft()->get();</code>
'diterbitkan' ialah parameternya.
Skop Dinamik ialah sejenis skop tempatan, di mana nama skop boleh dipanggil secara dinamik. Laravel membenarkan penggunaan scopeName()
nama jenis.
<code class="language-php">class Post extends Model { // লোকাল স্কোপ public function scopeStatus($query, $status) { return $query->where('status', $status); } }</code>
skop kini boleh dipanggil secara dinamik:
<code class="language-php">$posts = Post::status('published')->get();</code>
Ini berfungsi sama seperti kaedah scopePublished()
.
Berbilang skop boleh dirantai. Contohnya, skop status
dan active
boleh digunakan bersama:
<code class="language-php">use Illuminate\Database\Eloquent\Scope; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; class ActiveScope implements Scope { public function apply(Builder $builder, Model $model) { $builder->where('active', 1); // সক্রিয় ফিল্টার } }</code>
Ini akan digunakan kedua-dua active
dan status('published')
.
Eloquent Skop Tempatan boleh dirantai, bermakna berbilang skop boleh digunakan serentak.
<code class="language-php">use App\Models\Post; use App\Scopes\ActiveScope; class Post extends Model { protected static function booted() { static::addGlobalScope(new ActiveScope); } }</code>
Terdapat tiga skop dan satu orderBy
dirantai.
Atas ialah kandungan terperinci ORM Fasih Laravel dalam Skop Separa Pertanyaan Bangla). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!