Laravel Модель запроса, когда чужая находится на другой таблице - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть две модели Document (с именем в качестве одного из столбцов) и ApplicationDocument. ApplicationDocument содержит внешний ключ (documentcument_id). Я хочу получить записи из документов, которые относятся к applicationDocument, а также соответствуют критериям имени.

Мои отношения выглядят так в ApplicationDocument

public function document()
    {
        return $this->belongsTo('App\Models\Document', 'doc_id');
    }

И выглядит так в Документе:

public function applicationDocument()
    {
        return $this->hasMany('App\Models\ApplicationDocument');
            
    }

И мой запрос выглядит так:

$previousDoc= Document::whereHas('applicationDocument', function (Builder $query) {
                    $query->where('application_id', $appID);
                })->where('name', $name)->get();

Мой запрос выдает ошибки. Что мне не хватает, пожалуйста?

1 Ответ

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

Этот код в черте, вы используете Тип подсказки . Однако laravel будет предполагать, что пространство имен Builder равно App\Traits. Таким образом, возникает ошибка.

Вы можете добавить эту строку вверху вашей черты:

use Illuminate\Database\Eloquent\Builder;

или удалить подсказку типа Builder.


По соглашению, Eloquent возьмет имя «модели змеи» модели-владельца и добавит к ней _id. Поэтому по умолчанию eloquent будет предполагать, что foreign_key равен document_id. Однако значение Foreign_key - doc_id, поэтому его необходимо указать.

Для ApplicationDocument:

public function document()
{
     return $this->belongsTo('App\Models\Document', 'doc_id');
}

Для Document рекомендуется использовать множественное число имя метода:

public function applicationDocuments()
{
    return $this->hasMany('App\Models\ApplicationDocument', 'doc_id', 'id');

}

Применить use($appID) для введения $appID в закрытие.

$previousDoc= Document::whereHas('applicationDocuments', function (Builder $query) use ($appID) {
                    $query->where('application_id', $appID);
                })->where('name', $name)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...