Laravel Eloquent - множественный подзапрос - PullRequest
0 голосов
/ 27 февраля 2019

Я использую Laravel и Eloquent ORM, который он предоставляет, но я изо всех сил пытаюсь выбрать нужные мне данные.У меня есть 2 модели

Company
Member

Как я могу это сделать?

SELECT * FROM members m, companies c 
WHERE (m.main_type = "2" AND m.main_id = c.id AND m.status = "1") 
AND ((m.username LIKE "%keywords%") OR (c.name LIKE "%keywords%"))

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Учитывая, что в компании может быть несколько членов, сначала необходимо установить отношения, такие как:

Company Модель:

public function members(){
    return $this->hasMany(Member::class);
}

Member Модель:

public function company(){
    return $this->belongsTo(Company::class,'main_id');
}

Затем вы можете использовать отношения для получения данных:

$result = Company::with(['members' => function($q){
    return $q->where('main_type', 2)->where('status', 1)->where(function($sq){
        return $sq->where('username', 'like', '%keywords%')
                  ->orWhere('name', 'like', '%keywords%');
    });
}]);

Заголовок, который обновляет отношения в соответствии с именами ваших внешних ключей.Я бы посоветовал вам быть более интуитивным, как member_id или company_id

0 голосов
/ 27 февраля 2019

Это должно выглядеть так.вам не нужно подзапрос.

Member::join('companies', 'companies.id', '=', 'members.main_id')
    ->where(function($query) {
        $query->where('main_type', 2)->where('status', 1);
    })->where(function($query) {
        $query->where('username', 'like', '%keywords%')->orWhere('name', 'like', '%keywords%');
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...