Wpis z mikrobloga

Witajcie,
Mam bardzo duży problem z relacjami przy Eager Loadingu w Laravel. Wygląda na straszny bug, ale pewnie oświecicie mnie, że jestem idiotą. No dobra, kto pierwszy pospieszy ze światłem :)? Poniżej uogólniony przykład, gdzie Produkt ma wielu kupujących, a kupujący ma profil użytkownika w osobnej tabeli.

Przy wywalonym Eager Loading, lub niedodawaniu SELECT/WHEREu wyłącznie wybranych pól - działa pięknie. W przypadku korzystania z EL - wszystkie relacje wywoałane z selectem lub where - zwracają null.

$produkt = Produkt::with('kupujacy.profil','komentarze'); // ładujemy relacje przez Eager Loading

// model Produkt

public function kupujacy($status = null) {
$relation = $this->hasMany('Kupujacy', 'idprodukt');
if ($status) {
$relation->where('status', $status);
}
return $relation;
}

// model Kupujacy
public function profil()
{
return $this->hasOne('Profil','id
user')->select(['name','surname']); // Przy Eager Loading bez SELECTA pobiera wszystkie kolumny, z SELECTEM zwraca NULL (a przy pobieraniu produktu bez EL działa normalnie w każdym przyppadku)
}

foreach($produkt->kupujacy as $klient)
{
$klient->profil->name; // zwraca NULL jeśli używamy EL przy jednoczesnym select na relacji
}

#laravel #webdev #php #programowanie
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

return $this->hasOne('Profil','iduser')->select(['name','surname']);

public function kupujacy($status = null) {

$relation = $this->hasMany('Kupujacy', 'idprodukt');


@hoRacy: mieszaj bardziej polski z angielskim, bo przecież tak trudno korzystać z poprawnego nazewnictwa...
  • Odpowiedz
@vault1337: Wybacz, przykład pisany w poście na potrzeby przedstawienia problemu. Nie próbuj proszę kopiować, bo może gdzieś nie ma średnika. Bo przecie #!$%@? NIE O NAZWNICTWO tu chodzi. Thx za kostruktywna pomoc :*
  • Odpowiedz