Problem z join()

Witam forumowiczów,

Mam problem z join() przy zapytaniu ActiveRecord.

Chcę połączyć dwie tabele (osoba, zamowienie):

$wynik = Zamowienie::find()->select(“osoba.nazwisko, zamowienie.tytuł”)->join(“JOIN”, ‘osoba’, ‘zamowienie.osoba_id=osoba.id’)->asArray()->all();

Powyższe polecenie nie działa, dostaje:

„Undefined index: id”

Co ciekawe, dla

$wynik = Zamowienie::find()->select("*")->join(“JOIN”, ‘osoba’, ‘zamowienie.osoba_id=osoba.id’)->asArray()->all();

Działa i wszystkie kolumny są poprawnie łączone, ale nie mogę wybrać, które mają zostać w wyniku - wyświetlają się wszyskie bo w select gwiazdka.

Czy ktoś może orientuje się, co jest nie tak?

Bardzo proszę o pomoc,

Pozdrawiam

Spróbuj tak,




$wynik = Zamowienie::find()->select(['osoba.nazwisko', 'zamowienie.tytuł'])->join('osoba', 'zamowienie.osoba_id=osoba.id')->asArray()->all();



Kurcze. Spróbowałem, niestety dalej to samo…

Pozdrawiam

Nie widzę co tu może być nie tak. Możesz wkleić akcję, której używasz i całą treść błędu?

Akcja:




public function actionQuery() {


$wynik = Zamowienie::find()->select("osoba.nazwisko, zamowienie.tytuł")->join("JOIN", 'osoba', 'zamowienie.osoba_id=osoba.id')->asArray()->all();


return $this->render('query',['wynik'=>$wynik]);


}



Widok:




print "<pre>";

print_r($wynik);

print "</pre>";



Błąd:

PHP Notice – yii\base\ErrorException

Undefined index: id

Zwróciłem jeszczę uwagę na jedną rzecz. może to ma znaczenie. Tabela zamówienie powinna mieć klucz obcy (osoba_id). W phpMyAdminie nie mogę znaleźć opcji przypisania kolumnie klucza obcego więc nic nie jest przypisane do kolumny…

Pozdrawiam

Aha, no dobra, nigdy tak nie robiłem, ale chyba o to chodzi.

  1. Używasz ActiveQuery, pobierasz dane do modelu Zamowienie, ale wypełniasz go tylko dwoma wartościami, więc krzyczy o pierwszą brakującą.

  2. Jeśli zależy Ci na pobraniu tylko kilku danych użyj po prostu obiektu Query http://www.yiiframework.com/doc-2.0/yii-db-query.html

  3. Jeśli jednak masz już ActiveRecord to dlaczego by nie zrobić relacji w modelu, nie będziesz musiał pisać ręcznie joina http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#working-with-relational-data

  4. Do relacji nie jest konieczne ustawienie klucza obcego w bazie, ale warto to zrobić. Nie wiem jak to zrobić w phpMyAdmin, chyba tylko ręcznie wpisując komendę w oknie SQL.

  5. Jeśli chcesz pobrać wszystko z tabeli to nie trzeba dodawać “->select(’*’)”, to jest z automatu.

Wow. Poszło, chodziło o pierwszy punkt, czyli brak id zamowienia. Uzupełniłem i poszło, ma być tak:




$wynik = Zamowienie::find()->select("zamowienie.id, osoba.nazwisko, zamowienie.tytuł")->join("JOIN", 'osoba', 'zamowienie.osoba_id=osoba.id')->asArray()->all();



Wielkie dzięki za pomoc,

Pozdrawiam