Yii2 joinwith aliasy

Kolejny problem napotkałem, z którym nie potrafię sobie póki co poradzić.

Dwie tabele jedna użytkownik z której potrzebuję pobrać nazwę użytkownika.

Druga tabela, w której na podstawie id użytkownika zapisuje sobie kto utworzył, edytował zamknął.

Problem wyszukiwanie ta aby szukać username zamiast wartości integera.

Dla pojedynczych wartości nie związanych z użytkownikiem powiązanych kluczami obcymi jest ok i działa problem jest przy próbie korzystania kilkukrotnego odwołania się do nazwy użytkownika w tym samym miejscu.

Błąd jest następujący:

Utworzone mam relacje, które to wyświetlają nazwę użytkownika w widokach i działają.


public function getUserCreateTask()

    {

        return $this->hasOne(User::className(),['id' => 'task_created_by']);

    }


    public function getUserUpdateTask()

    {

        return $this->hasOne(User::className(),['id' => 'task_updated_by']);

    }


    public function getUserCloseTask()

    {

        return $this->hasOne(User::className(), ['id' => 'task_closed_by']);

    }


    public function getUserReopenTask()

    {

        return $this->hasOne(User::className(), ['id' => 'task_reopen_by']);

    }



Dla jednego działa dla większej ilości już, błąd jaki podałem wyżej.

Próbuję się odwołać w modelu wyszukiwania w ten sposób:


$query->joinWith('userCreateTask');

$query->joinWith('userUpdateTask');

oraz


->andFilterWhere(['like', 'user.username', $this->task_created_by])

->andFilterWhere(['like', 'user.username', $this->task_updated_by]);

Szukam jakieś wskazówki jak użyć aliasów, czy w ogóle dobrze myślę, że należy je użyć?

Wstępne próby użytych informacji wyszukanych w google na ten temat dają negatywne wyniki.

Edit:

Chyba rozwiązałem poprzez dodanie do relacji:


->from(['task_created_by' => User::tableName()]

->from(['task_updated_by' => User::tableName()]

Następnie odwołuję się w sposób:


->andFilterWhere(['like', 'task_created_by.username', $this->task_created_by])

->andFilterWhere(['like', 'task_updated_by.username', $this->task_updated_by]);

Czy poprawne jest to rozwiązanie?

Dzięki za post, nauczyłem się jednej ciekawej rzeczy


->from(['task_created_by' => User::tableName()]

Czy poprawne jest to rozwiązanie? -> sam jestem ciekawy, możesz podać jak wygląda zbudowane zapytanie SQL (z profiling Debug toolbar)

Zawsze staram się napisać jak na coś wpadnę w końcu, bo zawsze może się komuś przydać.

Zapytanie:




SELECT COUNT(*) FROM `task` LEFT JOIN `status` ON `task`.`status_id` = `status`.`status_id` LEFT JOIN `customer` ON `task`.`customer_id` = `customer`.`customer_id` LEFT JOIN `priority` ON `task`.`priority_id` = `priority`.`priority_id` LEFT JOIN `user` `task_created_by` ON `task`.`task_created_by` = `task_created_by`.`id` LEFT JOIN `user` `task_updated_by` ON `task`.`task_updated_by` = `task_updated_by`.`id` LEFT JOIN `user` `task_closed_by` ON `task`.`task_closed_by` = `task_closed_by`.`id` LEFT JOIN `user` `task_reopen_by` ON `task`.`task_reopen_by` = `task_reopen_by`.`id` WHERE `task_created_by`.`username` LIKE '%michal%'



Opinie mile widziane, generalnie ja się uczę więc do końca też wszystkiego nie rozumiem, a powyższe rozwiązanie trochę z dokumentacji, trochę z jakiś przykładów. Framework ten jest pierwszym jakiego poznaję, jak i uczę się samego programowania php. sql i innych w ramach jakiegoś rozwijania się.

Stąd może być wiele jeszcze pytań różnych ode mnie.