Caching hubungan yang ingin dimuat dalam model (dilindungi $with) dengan Laravel dan Eloquent

Dalam model Article saya, saya ingin memuat hubungan kategori dalam model:

protected $with = array('category');

Ketika saya mendapatkan artikel saya di pengontrol, saya menyimpan hasil artikel saya dan hubungan yang ingin saya muat di sana:

$articles = Article::with([
   'owner' => function ($q) {$q->remember(10);},
   'tags' => function ($q) {$q->remember(10);},
   'thumbnail' => function ($q) {$q->remember(10);}
   ])
   ->remember(10)->get();

Tetapi; article.category tidak di-cache. Saya pikir itu akan di-cache bersama dengan model Article, karena model itu ingin dimuat dalam model itu. Tapi ini tidak terjadi.

Namun itu akan di-cache jika saya ingin memuat (dengan cache) di pengontrol dengan menambahkan ini ke Article::with saya:

'category' => function ($q) {$q->remember(10);}

Saya tahu bahwa saya dapat remember() hubungan itu sendiri:

public function category()
{
    return $this->belongsTo('Category', 'category_id')->remember(10);
}

Tapi kemudian itu akan selalu di-cache, saya ingin menentukan apakah dan untuk berapa lama itu di-cache di pengontrol. Karena nilainya mungkin berbeda seiring penggunaan.

Apakah itu mungkin? Atau haruskah caching didefinisikan dalam model, karena pemuatan cepat terjadi di sana?


person Thomas Jensen    schedule 07.10.2014    source sumber
comment
Cukup gunakan with('category' => ... di pengontrol Anda.   -  person Jarek Tkaczyk    schedule 08.10.2014
comment
Saya melakukan beberapa pengujian tadi malam dan sampai pada kesimpulan yang sama. Saya perhatikan bahwa saya akhirnya melakukan banyak pemuatan hubungan komponen yang tidak perlu. Terima kasih atas masukan Anda tentang ini :)   -  person Thomas Jensen    schedule 08.10.2014
comment
Terima kasih kembali. Anda mungkin ingin mengekstraknya ke repositori, jadi Anda tidak mengisi pengontrol Anda dengan semua logika itu. Dan repositori sedang trendi saat ini ;)   -  person Jarek Tkaczyk    schedule 08.10.2014
comment
Saya telah melihat ekspresi tersebut muncul, tetapi saya tidak mengenalnya (di luar dunia git). Sepertinya saya memiliki penelitian terlebih dahulu, sekali lagi terima kasih :) Oh, dan saya akan menambahkan tautan ke situs SOFTonSOFA Anda ketika situs saya aktif, sumber daya Eloquent yang bagus jempol   -  person Thomas Jensen    schedule 08.10.2014
comment
Telusuri pola repositori untuk mempelajari lebih lanjut. Dalam repositori dunia laravel sebagian besar mengacu pada abstraksi pada lapisan penyimpanan (baik itu db dan fasih atau apa pun), yang akan memisahkan pengontrol Anda dari mesin persistensi yang Anda gunakan. Dan yang lebih penting, ini memungkinkan pengujian kode Anda lebih mudah.   -  person Jarek Tkaczyk    schedule 08.10.2014
comment
@JarekTkaczyk Jika Anda memasukkan ini dalam bentuk jawaban, saya akan menerimanya.   -  person Thomas Jensen    schedule 17.10.2014


Jawaban (1)


Cukup gunakan with('category' => ... di pengontrol Anda.

Anda mungkin ingin mengekstraknya ke repositori, jadi Anda tidak mengisi pengontrol Anda dengan semua logika itu. Dan repositori sedang trendi saat ini ;)

Telusuri pola repositori untuk mempelajari lebih lanjut.

Dalam repositori dunia laravel sebagian besar mengacu pada abstraksi pada lapisan penyimpanan (baik itu db dan fasih atau apa pun), yang akan memisahkan pengontrol Anda dari mesin persistensi yang Anda gunakan.

Dan yang lebih penting, ini memudahkan pengujian kode Anda.

person Jarek Tkaczyk    schedule 17.10.2014