Laravel - Откуда по отношению из другой базы данных

Я пытаюсь применить условие where к объединенной таблице, но получаю эту ошибку:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'cts.plant' doesn't exist (SQL: select * from tbl_complaint where exists (select * from tbl_plant where tbl_complaint.made_in_plant = tbl_plant.plant_id and sap_code = 99999) order by created desc limit 50 offset 0)

Мои классы моделей выглядят примерно так:

Основная модель

    class Complaint extends Model {
        protected $connection= 'first';
        protected $table = 'complaint';
        protected $primaryKey = 'complaint_id';

    public function  customerPlant() {
        return $this->hasOne(Plant::class, 'plant_id', 'customer_plant_id')
                    ->select('plant_id', 'sap_code', 'plant_name');
    }
}

Подключенная модель

class Plant extends Model {
    protected $connection= 'second';
    protected $table = 'plant';
    protected $primaryKey = 'plant_id';

    public function getKeyName() {
        return 'plant_id';
    }
}

Получение данных:

    $query = Complaint::with([
        'madeInPlantId']
    $query = Complaint::whereHas('madeInPlant', function($query){
        $query->where('sap_code','=','99999');
    });
    $query->get();

Я думаю, что проблема в том, что я не указываю, что подключенная таблица находится в другой базе данных.

вы можете опубликовать используемые строки подключения?

Joe 04.12.2018 07:35

зачем вам строки подключения? Кроме того, я должен сказать, что без wherehas clausule все работает нормально, я получаю запись с объединенными данными из другой таблицы

Miro Hascic 04.12.2018 07:42

потому что, я просто хочу кое-что подтвердить, у нас уже есть настройка, аналогичная вашей. таблицы находятся на одном сервере, но в разных базах данных, все, что нам нужно сделать, это префикс имени базы данных к имени таблицы protected $table = 'database1.plant';

Joe 04.12.2018 07:47

Можете ли вы включить в вопрос текст об ошибке? Темный текст мелким шрифтом на черном фоне практически не читается

Joni 04.12.2018 07:54

я отредактировал вопрос с текстом ошибки

Miro Hascic 04.12.2018 08:04

я вижу, что ошибка в моем случае заключается в том, что Eloquent пытается получить данные из базы данных cts, но таблица plant находится в другом db

Miro Hascic 04.12.2018 08:06

@Joe большое спасибо, ваше предложение действительно сработало. если вы напишете ответ, я его приму :)

Miro Hascic 04.12.2018 08:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
7
83
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

если ваши таблицы находятся на одном сервере, но в разных базах данных, вы можете это сделать.

class Complaint extends Model {
    protected $table = 'cts.complaint';
    protected $primaryKey = 'complaint_id';

    public function  customerPlant(){
        return $this->hasOne(Plant::class, 'plant_id', 'customer_plant_id')
                ->select('plant_id', 'sap_code', 'plant_name');
    }
}

class Plant extends Model{
    protected $table = 'otherdatabase.plant';
    protected $primaryKey = 'plant_id';

    public function getKeyName() {
        return 'plant_id';
    }
}

Другие вопросы по теме