1 Pytanie: Relacja Laravel belongsToMany z jednym wynikiem

pytanie utworzone w Tue, Apr 9, 2019 12:00 AM

Mam relację między dwiema tabelami z tabelą łączenia, która ma tylko jeden wynik.

Kiedy zdefiniuję relację Laravel belongsToMany, zamiast zwracać kolekcję z tylko jednym elementem, chciałbym, aby zwracał ten element sam.

Czy istnieje sposób modelowania tego w Laravel?

Z góry dziękuję.

[ EDYCJA ]

Spróbuję wyjaśnić, czego chcę, używając klasycznego przykładu Użytkownicy /Role. Oprócz de users i roles tabel, będziemy mieć tabelę przestawną users_roles, która będzie przechowywać wszystkie role użytkownika. Użytkownik może w dowolnym momencie mieć tylko jedną aktywną rolę (oznaczoną atrybutem active o wartości true).

class User {
    function role() {
        return $this->belongsToMany('App\Role')->wherePivot('active', 'true');
    }
}

Z tą definicją relacji, gdy uzyskuję dostęp do $user->role, otrzymuję kolekcję (z tylko jednym elementem) Ról. Chciałbym mieć tę instancję roli bezpośrednio.

    
0
  1. pokaż nam kod, który do tej pory osiągnąłeś
    2019-04-09 11: 16: 49Z
  2. Pokaż dane tabel i kody modeli Laravel
    2019-04-09 11: 18: 37Z
  3. Czy twoja tabela przestawna ma dodatkowe atrybuty (oprócz kluczy obcych)?
    2019-04-09 11: 40: 33Z
1 odpowiedzi                              1                         

Nie wiem, dlaczego masz belongsToMany, jeśli potrzebujesz tylko jednej relacji, jednak poniżej kod pomoże:

 public function products()
    {
        return $this->belongsToMany('App\Product');
    }


 public function specific_product()
    {
        return $this->products()
->where('column','value')->first();

// other conditions
    }

LUB

public function getSpecificProductAttribute()
    {
        return $this->products()
->where('column','value')->first();

// other conditions
    }
    
2
2019-04-09 11: 53: 42Z
  1. Mam kilka wpisów w tabeli przestawnej, ale tylko jedna jest poprawna i to jest ta, którą chcę zwrócić. Podoba mi się twoje podejście.
    2019-04-09 11: 26: 05Z
  2. "Problemem" w tym rozwiązaniu jest to, że nie mogę uzyskać do niego dostępu jako własności, jak normalne relacje ...
    2019-04-09 11: 32: 30Z
  3. następnie zmień specific_product na getSpecificProduct, a następnie możesz uzyskać bezpośrednio formularz modelu macierzystego
    2019-04-09 11: 44: 13Z
źródło umieszczone tutaj