Bir MVC uygulamasında model İlişkiler?

3 Cevap php

Şimdi uygulamada bir kullanıcıyı temsil eden bir model kullanıcı var. Ve ben GetById ($ id) ve GetAll () gibi yöntemler ile bir UserRepository kullanın.

Bir kullanıcı yorumları gönderebilirsiniz. Ben kullanıcı sormak en çok mantıklı bir kullanıcının 5 veya 10 veya belki 20 son yorumları göstermek istiyorum sanırım. Yani bir yöntem $ user-> getLastReviews (5) olurdu.

Ama bu uygulamak için en iyi yolu nedir? Her kullanıcıya (örneğin bir yöntem $ reviewRepository-> getByUser (Kullanıcı $ user) ile) ReviewRepository bir örneğini verebilir misiniz? Ya da daha iyi yolları vardır?

3 Cevap

Ben bu modelleri içeren ve diğer modellerin örneklerini kullanmak için iyi olduğunu düşünüyorum, bu yüzden yol Kullanıcı Model İnceleme modelinin bir örneğini içeren var ve bu katılım modeli yorumlar söyledi alma mantığını halledeyim, gayet iyi.

Ayrıca, bu yüzden gibi işlemek için UserRepository bir yöntem ekleyebilirsiniz:

class UserRepository extends Model{
     $review = new reviewRepository();
     function getReviews($numOfReviews){
         return $this->review->getReviews($user_id);
     }

Başka bir seçenek, her iki değişkene geçirilen bir depo yöntemi oluşturmak olacaktır. $ ReviewRepository-> getLastReviewsByUser (5, $ user) gibi bir şey.

Genellikle bu ORM için bir iştir. Hemen hemen her çerçeve bir uygulama (PHP / Symfony veya Hibernate Java için yani Doktrini) kullanır, ancak doğal olarak siz (ORM sık sık iç gözlem kullanılarak uygulanır) kendi ORM uygulayabilirsiniz.

Eğer bir ORM kütüphanesi var kez (eğer "kullanıcı birçok yorum var" olacak sizin durumunuzda) bir "kurulum aşamasında" modeller arasındaki ilişkileri tanımlar. Sonra (genellikle ilişkilerin karşılıklı yani vardır. "Yorumu kullanıcıya aittir") bu olanlar ile başa çıkmak için nasıl bilir ORM yöntemlerini kullanacağız. Kavramı bu kurulum aşaması size işaret gibi konular ile ilgili sizi taburcu olacaktır.

Benim önerim zaten ilgili Modeller alıcı ve ayarlayıcı yöntemleri için imkanları tedarik mevcut ORM uygulamaları birini kullanmaktır. Diğer durumda, her Model kendiniz özel alıcı ve ayarlayıcıları yazmak zorunda.