Имел две модели (меню, сервис) с двумя разными базами данных, подключение задавал в модели. когда я получаю модель меню с (сервисным) отношением, она работает нормально. Но при использовании has(service) для отображения меню с сервисом
Base table or view not found: 1146 Table 'common.services' doesn't exist
он будет выглядеть в моей первой базе данных
common - это имя моей первой базы данных, а службы хранятся во второй базе данных.
создать две модели в разных базах данных
fetch menu с отношением has(service), чтобы получить только меню, в котором есть сервис
не могли бы вы поделиться этим репозиторием... так что я могу видеть... я пробую все... это странная ошибка отображается только тогда, когда я использовал has()........ with() работает нормально
Извините, мой плохой, вы правы, не работает для has(), но очень хорошо работает с with()
есть несколько других ловушек с laravel и несколькими базами данных, т.е. вы не можете создать запись в БД A, когда родительская модель находится в БД B. Laravel имеет два метода, отвечающих за оформление имени таблицы, один добавляет (тот, который используется для with( ) и подобные) добавляет имя базы данных, но второй (основной метод) добавляет только префикс имени.






Eloquent в настоящее время не поддерживает запросы на отношения существование в базах данных. Отношения должны существовать внутри одна и та же база данных.
В чем причина успешного извлечения with() и неудачи has()?
with() был реализован в Illuminate\Database\Eloquent\Builder и собирает отношения в массиве $eagerLoading для загрузки с запросом.
но has() находится в черте Illuminate\Database\Eloquent\Concerns\QueriesRelationships и используется в Illuminate\Database\Eloquent\Relations\Relation вызовах getRelationWithoutConstraints(), а именно:
/**
* Get the "has relation" base query instance.
*
* @param string $relation
* @return \Illuminate\Database\Eloquent\Relations\Relation
*/
protected function getRelationWithoutConstraints($relation)
{
return Relation::noConstraints(function () use ($relation) {
return $this->getModel()->{$relation}();
});
}
как говорит PHPDoc, он просто получает экземпляр базового запроса для отношения has.
это простой метод, ПРОСТО создающий простой базовый запрос на основе getModel() запроса (родительский запрос) и добавляющий его.
Решение может быть достигнуто с помощью DB::raw.
да, вы были правы... Я не читал этот КРАСНЫЙ блок, но вы также можете достичь этого Model::first()->relation()->first()....звучит глупо, но работает
Предоставьте пример кода для воспроизведения ситуации/ошибки