2014-04-24 5 views
0

나는 다음과 같은 요구 사항이하십시오 User가이 유형 (아마도 모델) 다른있는 Book Laravel 4 - 데이터베이스 설계

  • 컬렉션 A와 컬렉션에 추가 할 수

    • : 위시리스트를, 관심 목록, 관심 목록
    • Book은 여러 컬렉션 유형의 일부일 수 있습니다 (예 : 위시리스트 에있을 수 있음). 관심 목록) 따라서

    , 내가 지금까지 가지고있는 모델은 다음과 같습니다 UserBook

    나는, 아주 쉬운 방법으로, 예를 들어이 관계를 액세스하고 싶습니다

    $wishlist = $user->collections()->wishlist; 
    $watchlist = $user->collections()->watchlist; 
    

    이 두 변수는 Books 컬렉션을 보유해야합니다.


    특정 컬렉션이 사용자 위시리스트의 일부인 횟수를 셀 수있는 방식으로 다른 컬렉션에 액세스하고 싶습니다. 예 :

    $book = Book::find(1); 
    $wishlist_count = $book->collections()->wishlist->count(); 
    


    어떻게 이러한 관계를 모델링 가야합니까? 모든 유형의

  • 답변

    2

    설정 피벗 테이블 :

    당신이 ..list 모델에 더 많은 전력이 필요하면
    // You can call the relations pretty easily: 
    $user->booksWishlist; // collection of Book models 
    
    $book->usersWatchlist->count(); // get count on the Collection of User models 
    // or alternatively 
    $book->usersWatchlist()->count(); // get count() on SQL query on related users 
    
    
    // tables: 
    book_user_wishlist: user_id, book_id, .. (id, timestamps and whatever you need) 
    book_user_watchlist: user_id, book_id, .. (id, timestamps and whatever you need) 
    // and so on.. 
    
    // --- Relations --- 
    // User model 
    public function booksWatchlist() 
    { 
        return $this->belongsToMany('Book', 'book_user_watchlist'); 
    } 
    
    public function booksWishlist() 
    { 
        return $this->belongsToMany('Book', 'book_user_wishlist'); 
    } 
    
    // Book model 
    public function usersWatchlist() 
    { 
        return $this->belongsToMany('User', 'book_user_watchlist'); 
    } 
    
    public function usersWishlist() 
    { 
        return $this->belongsToMany('User', 'book_user_wishlist'); 
    } 
    

    할 수 있습니다 사용자 및 도서 모델의 모든 newPivot를 오버라이드 (override)리스트() 메소드에 대한 설정을 사용자 정의 피벗 모델.

    +0

    잘 작동합니다. 고맙습니다. 작은 관련 후속 질문 : '도서'템플릿 내에서 사용자가 소장 도서 중 하나에 도서가 있는지 여부를 어떻게 확인합니까? 예 : 책이 이미 사용자의 위시리스트에 있으면 클래스에 div를 추가하십시오. – Max