@balex777

Как в YII1 выбрать данные из нескольких связных таблиц одним запросом через связи?

Привет есть у меня 7 таблиц, вот скрин5d7b1fe9c45d7509903551.png

Хотелось бы одним запросом к Contats Выбрать Компанию, ее категории, работников и телефоны работников и т.д.

Я сделал такие связи
Contacts
public function relations()
    {
        return array(
            'company' => array(self::BELONGS_TO, 'Company', 'company_id'),
        );
    }


Company
public function relations()
    {
        return array(
            'category' => array(self::BELONGS_TO, 'BusinessCategory', 'category_id'),
            'contacts' => array(self::HAS_MANY, 'Contacts', 'company_id'),
            'staffCompanies' => array(self::HAS_MANY, 'StaffCompany', 'company_id'),
        );
    }


BusinessCategory
public function relations()
    {
        return array(
            'companies' => array(self::HAS_MANY, 'Company', 'category_id'),
        );
    }


StaffCompany
public function relations()
    {
        return array(
            'emailStaffCompanies' => array(self::HAS_MANY, 'EmailStaffCompany', 'staff_company_id'),
            'networkStaffCompanies' => array(self::HAS_MANY, 'NetworkStaffCompany', 'staff_company_id'),
            'phoneStaffCompanies' => array(self::HAS_MANY, 'PhoneStaffCompany', 'staff_company_id'),
            'company' => array(self::BELONGS_TO, 'Company', 'company_id'),
        );
    }


PhoneStaffCompany, NetworkStaffCompany, EmailStaffCompany
public function relations()
    {
        return array(
            'staffCompany' => array(self::BELONGS_TO, 'StaffCompany', 'staff_company_id'),
        );
    }


Пытался сделать такой запрос к Contacts
Contacts::model()->with('company')->findAll(array("condition"=>"user_id = $user_id"));

но выдает только Контакт и Компанию
А ее Staff(их телефоны мыло ) и категорию
Как лучше сделать запрос, чтобы я обратился к контакту один раз, а он по связям собрал всю инфу в других таблицах?
  • Вопрос задан
  • 39 просмотров
Решения вопроса 1
BojackHorseman
@BojackHorseman
...в творческом отпуске...
Можно осуществлять вложенную жадную загрузку. Для этого вместо простого списка имён связей, мы передаем методу with() имена связей, упорядоченных иерархически, как в следующем примере:

$posts=Post::model()->with(
    'author.profile',
    'author.posts',
    'categories')->findAll();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы