Красноречивое удаление столбцов - PullRequest
0 голосов
/ 14 февраля 2020

У меня действительно странная проблема с моим красноречивым запросом. У меня есть таблица с именем Calls, к которой я присоединяюсь к Contacts и Companies. Я пытаюсь сослаться на столбец calls.id, но он был заменен идентификатором для Companies.

Вот мой запрос:

$calls=DB::table('calls')
        ->leftJoin('contacts','calls.contact_id','=','contacts.id')
        ->leftJoin('companies','calls.company_id','=','companies.id')
        ->where('completed','=',false)
        ->orderBy('call_on','asc')
        ->get();

return $calls;

Я видел на Github что это, кажется, известная ошибка, но никто не предложил обходной путь.

Может кто-нибудь указать мне правильное направление?

1 Ответ

1 голос
/ 14 февраля 2020

Наиболее подходящим решением для вашего непосредственного вопроса является добавление выбора в ваш запрос Eloquent:

$calls=DB::select('calls.* from calls')
        ->leftJoin('contacts','calls.contact_id','=','contacts.id')
        ->leftJoin('companies','calls.company_id','=','companies.id')
        ->where('completed','=',false)
        ->orderBy('call_on','asc')
        ->get();

return $calls;

Вместо значения по умолчанию select * явно диктуйте, что будет возвращено. Тем не менее, это может быть сделано более аккуратно с помощью Eloquent с использованием моделей:

Calls::whereHas('companies', function (Builder $query) {
    $query->where('completed', false);
})->orderBy('call_on', 'asc')->get();

Для того, чтобы это работало, вам нужно установить отношение на уровне модели:

// App\Calls model:
public function companies() {
    return $this->belongsTo(App\Companies::class);
}

// App\Companies model:
public function calls() {
    return $this->hasMany(App\Calls::class);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...